2011年2月17日星期四

vim 常用命令


  • 0 到行首

  • $ 到行尾

  • ^ 到行首字母

  • ( 到上面一句或者上面一个代码段

  • ) 到下面一句或者下面一个代码段

  • `. 到最后一次修改的位置

  • / 搜索/指定文字,找到之后可使用n来跳到下一个相同单词位置

  • : 转跳到指定行数

  • :$ 转跳到文件末尾,这个和G的作用相同

  • i 插入模式,I也可以,还有a, A

  • o 在当前行下面建立新行,对应的有O,在当前行上面




  • v 进入区块选择

  • y 复制已经选择的区块

  • yy 复制当前行

  • d 剪切已经选择的区块

  • dd 剪切当前行

  • p 粘贴已经选择的区块




  • . 重复上次指令

  • 重复执行指定的指令




  • % 匹配花括号,方括号,括号等,用于例如跳转到对应的{}位置

  • gd 到达光标所在处函数或者变量的定义处

  • > 缩进代码,在v下可用

  • >> 缩进当前行代码

  • < 反缩进代码,在v下可用

  • << 反缩进当前行




搜索替换


简单替换表达式
替换命令可以在全文中用一个单词替换另一个单词
[bash]
:%s/four/4/g
[/bash]
%范围前缀表示在所有行中执行替换. 最后的g 标记表示替换行中的所有匹配点. 如果仅对当前行进行操作, 去掉%即可

如果有一个 thirtyfour 这样的单词, 上面的命令会出错. 这种情况下, 这个单词会被替换成 thirty4. 要解决这个问题, 用 \< 来指定匹配单词开头:
[bash]
:%s/\<four/4/g
[/bash]
显然, 这样在处理 fourty 的时候还是会出错. 还需要用\>来解决这个问题:
[bash]
:%s/\<four\>/4/g
[/bash]

如果只想替换注释中的 four, 而保留代码中的,由于这很难指定, 可在替换命令中加一个c标记, 这样, Vim 会在每次替换前提示:
[bash]
:%s/\<four\>/4/gc
[/bash]

删除多余的空格
要删除这些每行后面多余的空格, 可以执行如下命令:
[bash]
:%s/\s\+$//
[/bash]
命令前面指明范围是 %, 所以这会作用于整个文件. substitute 命令的匹配模式是 \s\+$. 这表示行末 ($) 前的一个或者多个 (\+) 空格(\s). 替换命令的 to 部分是空的: //. 这样就会删除那些匹配的空白字符.

匹配重复性模式
星号项* 规定在它前面的项可以重复任意次. 因此:
[bash]
/a*
[/bash]
匹配 a, aa, aaa, 等等. 但也匹配 (空字串), 因为零次也包含在内. 星号 * 仅仅应用于那个紧邻在它前面的项. 因此 ab* 匹配 a, ab, abb,abbb, 等等. 如要多次重复整个字符串, 那么该字符串必须被组成一个项. 组成一项的方法就是在它前面加 \(, 后面加 \). 因此这个命令:
[bash]
/\(ab\)*
[/bash]
匹配: ab, abab, ababab, 等等. 而且也匹配.

要避免匹配空字串, 使用 \+. 这表示前面一项可以被匹配一次或多次.
[bash]
/ab\+
[/bash]
匹配 ab, abb, abbb, 等等. 它不匹配 后面没有跟随 b 的 a.

要匹配一个可选项, 用 \=. 例如:
[bash]
/folders\=
[/bash]
匹配 folder 和 folders.

指定重复次数
要匹配某一项的特定次数重复, 使用 \{n,m} 这样的形式. 其中 n 和 m 都是数字. 在它前面的那个项将被重复 n 到 m 次 (|inclusive| 包含 n 和 m). 例如:
[bash]
/ab\{3,5}
[/bash]
匹配 abbb, abbbb 以及 abbbbb.

当 n 省略时, 被默认为零. 当 m 省略时, 被默认为无限大. 当 ,m 省略时, 就表示重复正好 n 次. 例如:
模式 匹配次数

  • \{,4} 0, 1, 2, 3 或 4

  • \{3,} 3, 4, 5, 等等

  • \{0,1} 0 或 1, 同 \=

  • \{0,} 0 或 更多, 同 *

  • \{1,} 1 或 更多, 同 \+

  • \{3} 3



多选一匹配
在一个查找模式中, 或运算符是 \|. 例如:
[bash]
/foo\|bar
[/bash]
这个命令匹配了 foo 或 bar. 更多的抉择可以连在后面:
[bash]
/one\|two\|three
[/bash]
匹配 one, two 或 three.

如要匹配其多次重复, 那么整个抉择结构须置于 \(\) 之间:
[bash]
/\(foo\|bar\)\+
[/bash]
这个命令匹配 foo, foobar, foofoo, barfoobar, 等等.

再举个例子:
[bash]
/end\(if\|while\|for\)
[/bash]
这个命令匹配 endif, endwhile 和 endfor

没有评论:

发表评论