vim高级手册

2013年5月20日 由 Creater 留言 »

一、向前移动一个词
w 3w b 2b (向前移动一个词 / 向前移动三个词 / 前后移动一个词 / 向后移动二个词)
e (移动到一个个单词词末) ge(移动到前一个单词末尾)
移动词的命令包括:w / W / e / E / b / B / ge / gE
二、移动到行首或行尾
“$” 命令把光标移动到当前行行尾。”^” 命令把光标移动到一行的第一个非空字符,而 “0” 命令则移到一行的第一个字符,
三、移动到一个指定的字符
单字符查找命令是最有用的移动命令之一。”fx” 命令向前查找本行中的字符 x。
可以在这个命令前面加计数前缀,所以,可以用 “3fl”
“F” 命令用于向左查找:
“tx” 命令与 “fx” 相似,但它只把光标移动到目标字符的前一个字符上。
四.移动到指定行:
“33G” 把你送到 33 行
“G” 命令把光标移动到文件末。移动到文件首的命令是 “gg”。
“50%” 移动到文件的中间,而 “90%” 移到差不多结尾的位置。
“H” 表示 “Home” (头)移动到屏幕上方,”M” 表示 “Middle” (中)移动到屏幕中间 而 “L” 表示 “Last” (尾)移动到屏幕下方。
五、滚屏
CTRL-U 命令向下滚动半屏 CTRL-D 命令把视窗向下移动半屏
每次滚一行的命令是 CTRL-E (上滚) 和 CTRL-Y (下滚)。

设置vim的选项
如果每次用 Vim 都要设置一些选项,如是否大小写匹配,显示行号.那么,你可以把这些命令写到Vim 的启动文件中。
用:scriptnames来查找vim启动文件在什么地方.
然后:edit ~/.vimrc
在这个文件中就可以设置一些选项了.

vim中使用标记
一、当你用 “G” 命令跳到另一个地方,Vim 会记住你从什么地方跳过去的。这个位置成为一个标记,要回到原来的地方,使用如下命令:“
“ 命令可以在两个位置上跳来跳去。而 CTRL-O 命令则跳到一个 “较老” 的地方 (提示: O 表示 older)。CTRL-I 则跳到一个 “较新” 的地方
:jumps 命令能输出一个你可以跳往的位置的列表。最后一个你使用的标记会用 “>” 符号标记出来。
二、Vim 允许你在文本中放置自定义的标记。命令 “ma” 用 a 标记当前的光标位置。你可以在文本中使用 26 个标记 (a 到 z)。这些标记是不可见的,只是一个由 Vim 记住的位置。
要跳到一个你定义的标记,可以使用命令 `{mark},这里 {mark} 是指定义标记的那个字母。所以,移到标记 a 的命令是: `a
三、你可以用如下命令取得所有的标记的列表::marks
到有一些特殊的标记,包括:
‘ 跳转前的光标位置
” 最后编辑的光标位置
[ 最后修改的开始位置
] 最后修改的结束位置

vim中的操作符与动作

一、 操作符-动作模式
“dw” 命令删除一个单词。你可能认出来了,”w” 是词移动命令。实际上,”d” 命令后面可以跟任何 “动作” (motion) 命令,它会删除从当前位置到光标移动到的目标位置的全部内容。
以上定义了一个命令组合模式:操作符-动作。你首先输入一个操作符命令,例如,”d”就是一个删除操作符。然后你输入一个动作命令,例如 “4l” 或者 “w”。这种方法使你可以在任何你能越过的文本上执行各种操作。
另一个操作符命令是 “c”,表示修改,change。它的作用方式与 “d” 操作符相似,只是完成后会切换到插入模式。例如,”cw” 修改一个词,更精确的说,它删除一个词,并切换到插入模式。
To err is human
——->
c2wbe
To be human
这里 “c2wbe” 包括如下操作:
c 修改操作符
2w 移动两个单词的距离 (与操作符合起来,它删除两个单词并进入插入模式)
be 插入 be 这个单词
二、更 多 的 修 改 命 令
像 “dd” 可以删除一行一样,”cc” 修改一整行。但它会保留这一行的缩进 (前导空格)。
“d$” 删除到行尾;”c$” 则修改到行尾。

命令 “3dw” 和 “d3w” 都是删除 3 个单词。如果你非要寻根问底,那么:”3dw” 表示删除一个单词 3 次,而 “d3w” 表示删除三个单词一次。这是一个没有分别的分别。实际上你可以放两个计数前缀,例如,”3d2w” 删除两个单词三次,共计六个单词。
三、重复一个修改
“.” 是 Vim 中一个非常简单而有用的命令。它重复最后一次的修改操作。例如,假设你在编辑一个 HTML 文件,你想删除所有的 标记。你把光标移到第一个 “<" 上,然后用 "df>” 命令删除 。然后你就可以移到 的 < 上面用 "." 命令删除它。"." 命令执行最后一次的修改命令 (在本例中,就是 "df>“)。要删除下一个 标记,移动到下一个 < 的位置,再执行 "." 命令即可。 To generate a table of contents
f< 找第一个 < --->
df> 删除到 > –>
f< 找下一个 < --------->
. 重复 df> —>
f< 找下一个 < ------------->
. 重复 df > –>

“.” 命令重复任何除 “u” (撤销),CTRL-R (重做) 和冒号命令外的修改。
再举一个例子:你想把 “four” 修改成 “five”。有好几个地方都要作这种修改。你可以
用如下命令快速完成这个操作:

/four 找到第一个 “four”
cwfive 修改成 “five”
n 找下一个 “four”
. 重复修改操作
n 找下一个 “four”
. 重复修改
如此类推……
四、可视模式
要删除一些简单的东西,用 “操作符-动作” 命令可以完成得很好。但很多情况下,并不容易确定用什么命令可以移到你想修改的地方。这时候,你就需要可视模式了。
你可以用 “v” 命令启动可视模式。你可以移动光标到需要的地方。当你这样做的时候,中间的文本会被高亮显示。最后执行一下 “操作符” 命令即可。
按 行 选 择
如果你想对整行做操作,可以使用 “V” 命令来启动可视模式。你会发现在你作任何移动之前,整行都被高亮显示了。左右移动不会有任何效果。而通过上下移动,你可以一次选择多行。
例如,用 “Vjj” 可以选中三行:

vim中的拷贝

一、copy and past
要把文本从一个地方拷贝到另一个地方,你可以先删除它,然后用 “u” 命令恢复,再用”p” 拷到另一个地方。这里还有一种简单的办法:抽出 (yank)。”y” 命令可以把文字拷贝到寄存器中。然后用 “p” 命令粘贴到别处。
yanking 是 Vim 中拷贝命令的名字。由于 “c” 已经被用于表示 change 了,所以拷贝 (copy) 就不能再用 “c” 了。但 “y” 还是可用的。把这个命令称为 “yanking” 是为了更容易记住 “y” 这个键。
由于 “y” 是一个操作符,所以 “yw” 命令就是拷贝一个单词了。当然了,计数前缀也是有效的。要拷贝两个单词,就可以用 “y2w”
“yy” 命令拷贝一整行,就像 “dd” 删除一整行一样。出乎意料地是,”D” 删除到行尾而”Y” 却是拷贝一整行。要注意这个区别!”y$” 拷贝到行尾。
从剪贴板中copy和粘贴:
要拷贝一行到剪贴板中: “*yy
要粘贴回来: “*p
以上仅在支持剪贴板的 Vim 版本中才能工作。更多的见:http://vcd.gro.clinux.org/doc/usr_09.html#09.3

vim中的文本对象

一、关于文本对象:
文本对象是作为一个整体来处理的。现在光标在对象中的位置无关紧要。
比如:aw 就代表光标所在处的一个文本对象,它是一个单词.如:
“daw” 的 “d” 是删除操作符。”aw” 是一个文本对象。提示:”aw” 表示 “A Word” (一个单词),这样,”daw” 就是 “Delete A Word” (删除一个单词)。
is表示inner sentence,表示光标所在的那行
“cis” 包括 “c” (change,修改) 操作符和 “is” 文本对象。这表示 “Inner Sentence”(内含句子)。还有一个文本对象是 “as”,区别是 “as” 包括句子后面的空白字符而 “is”不包括。如果你要删除一个句子,而且你还想同时删除句子后面空白字符,就用 “das”;如果你想保留空白字符而替换一个句子,则使用 “cis”。
你还可以在可视模式下使用文本对象。这样会选中一个文本对象,而且继续留在可视模式,你可以继续多次执行文本对象命令。例如,先用 “v” 启动可视模式,再用 “as” 就可以选中一个句子。现在重复执行 “as”,就会继续选中更多的句子。最后你可以使用一个操作符去处理这些被选中的句子。
详细的文本对象可见http://vcd.gro.clinux.org/doc/motion.html#text-objects:

简单键盘映射

一、map命令:
映射可以使你把一系列 Vim 命令绑定为一个单独的键。假设你要用一个大括号将一个特
定的单词括起来。例如,把 “amount” 变成 “{amount}”。用 “:map” 命令,就可以让 F5
来完成这个工作。命令如下:
:map i{ea}
在输入这个命令时, 要用四个字符表示。相似地,输入 不是直接按 键,而是输入五个字符。
比如,在写cpp文件时,用键自动插入{},可以这样键盘映射:
:map i{}ki
再举一例,键盘映射\i这个命令自动为单词加上(),可以:
:map \i bi(ea)
有了map命令,可以把常用到的命令作为键盘映射,用得时候直接调用快捷键即可.

还有一种map命令,对于可视模式的:vmap
如,给选中的文本加上标签,快捷键为Ctrl+S
:vmap cpa
或者::vmap s //其中“表示寄存器”
取消键盘映射:vunmap

一些其它命令:

*:读取光标处的字符串,并且移动光标到它再次出现的地方。
#:和上面的类似,但是是往反方向寻找。
i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行
VIM 有一个非常漂亮的关键词自动完成系统。这表示,你可以输入一个长词的一部分,然后按一下某个键,然后 VIM 就替你完成了这个长词的输入了。举个例子:你有一个变量名为 iAmALongAndAwkwardVarName 在你写的代码的某个地方。也许你不想每回都自己一个一个字母的去输入它。
使用关键词自动完成功能,你只需要输入开始几个字母(比如 iAmAL),然后按 (按住 Ctrl,再按 N)或者 。如果 VIM 没有给出你想要的词,继续按,直到你满意为止,VIM 会一直循环它找到的匹配的字符串。

用 VIM 写代码

p:和 p 的功能差不多,但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置。试一下!
%:匹配花括号、方括号、括号等。在一个括号的上面,然后按 %,鼠标就会出现在匹配的另外一半括号处。
>>:缩进所有选择的代码
<<:和上面类似,但是反缩进 gd:到达光标所在处函数或者变量的定义处。 K:在 Man 里面查找光标当前所在处的词。 显示Tab键: 文件中有 TAB 键的时候,你是看不见的。要把它显示出来: :set list 控制Tab的显示样式: :set listchars=tab:>-,现在,TAB 会被显示成 “>—”
:set listchars=tab:-. 现在,TAB 会被显示成 “-…”
以上以此类推,Tab的显示样式需要两个符号来控制.
设置详细的listchars可以详见:help ‘listchars

设置文件的类别:

set filetype=cpp / set ft=perl
设置语法高亮:
要在当前缓冲区中使用高亮,需要设置 ‘syntax’ 选项:
:set syntax=ON
如果你想只对特定的文件采用语法高亮,可以使用这个命令:
:syntax manual
如果你要完全关闭这个功能:
:syntax off
使用色彩显示文本会影响效率。如果你觉得显示得很慢,可以临时关掉这个功能:
:syntax clear

使用不同颜色

:colorscheme evening
“evening” 是色彩方案的名称。还有几种备选方案可以试一下。在 $VIMRUNTIME/colors
中可以找到这些方案。

广告位

发表评论

你必须 登陆 方可发表评论.