Vim的一些使用技巧

vim中的操作


一、设置大小字符匹配不匹配
    set ignorecase / set ic
    set noignorecase /set noic
二、设置查找时高亮显示与不显示
    set hlsearch  /set hls
    set nohlsearch /set nohls
三、设置在查找过程中就显示匹配点 与 在查找过程中不显示匹配点
    set incsearch / set is
    set noincsearch / set nois
四、设置查找到结尾或开头后停止  与 查找到结尾后折回到文件开头重新查找
   set wrapscan / set ws
   set nowrapscan /set nows
五、设置显示行号
   set number / set nu
   set nonumber /set nonu
六、设置Tab键宽度
   set ts =4

vim中的移动命令


  http://vcd.gro.clinux.org/doc/usr_03.html#usr_03.txt
一、向前移动一个词
    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<Esc>
        To be human
这里 "c2wbe<Esc>" 包括如下操作:
        c       修改操作符
        2w      移动两个单词的距离 (与操作符合起来,它删除两个单词并进入插入模式)
        be      插入 be 这个单词
二、更 多 的 修 改 命 令
像 "dd" 可以删除一行一样,"cc" 修改一整行。但它会保留这一行的缩进 (前导空格)。
"d$" 删除到行尾;"c$" 则修改到行尾。

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

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

        /four<Enter>    找到第一个 "four"
        cwfive<Esc>     修改成 "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 <F5> i{<Esc>ea}<Esc>
 在输入这个命令时,<F5> 要用四个字符表示。相似地,输入 <Esc> 不是直接按<Esc> 键,而是输入五个字符。
 比如,在写cpp文件时,用<F5>键自动插入{},可以这样键盘映射:
  :map <F5> i{<Enter><Enter>}<Esc>ki<Tab>
 再举一例,键盘映射\i这个命令自动为单词加上(),可以:
 :map \i  bi(<Esc>ea)<Esc>
 有了map命令,可以把常用到的命令作为键盘映射,用得时候直接调用快捷键即可.

  还有一种map命令,对于可视模式的:vmap
  如,给选中的文本加上<small></small>标签,快捷键为Ctrl+S
   :vmap <C-S> c<small><Esc>pa</small><Esc>
   或者::vmap <C-S> s<small><C-R>”</small><ESC>  //其中<C-R>"表示寄存器"
   取消键盘映射:vunmap <C-S>

 

一些其它命令:


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

 

posted @ 2007-06-06 17:25  shipfi  阅读(936)  评论(0编辑  收藏