vim常用操作整理

vi是个可视化的编辑器,可视化编辑器的含义就是在编辑文本时可以看到它们。Linux下的vim是vi的一个增强版本,有彩色和高亮等特性,对编程有很大的帮助。 
  
基本使用: 
启动和退出vim 
    vim的启动:在Linux的提示符下键入vim(或使用vim myfile来编辑已经存在的文件)即可启动它。 
    vim的退出:先按下Esc键回到命令行模式,然后键入“:”,此时光标会停留在最下面一行,再键入"q"(如果强行退出则还在后面加 "!" ),最后按下Enter键即可。 
  
VIM 关于移动的命令 
在当前行里面有效的移动光标 
    * fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。 
    * tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用) 
    * Fx:和 fx 类似,不过是往回找。 
    * w:光标往前移动一个词。 
    * b:光标往后移动一个词。 
    * 0:移动光标到当前行首。 
    * ^:移动光标到当前行的第一个字母位置。 
    * $:移动光标到行尾。 
    * ):移动光标到下一个句子。 
    * ( :移动光标到上一个句子。 
在整个文件里面有效移动光标 
    * <C-F>:向下移动一屏。 
    * <C-B>:向上移动一屏。 
    * G:到文件尾 
    * numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行) 
    * gg:到文件首 
    * H:移动光标到屏幕上面 
    * M:移动光标到屏幕中间 
    * L:移动光标到屏幕下面 
    * *:读取光标处的字符串,并且移动光标到它再次出现的地方。 
    * #:和上面的类似,但是是往反方向寻找。 
    * /text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n。 
    * ?text:和上面类似,但是是反方向。 
    * ma:在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。 
    * `a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。 
    * `.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。 
  
有效的移动大段的文本 
    * v:按字符选择。经常使用的模式,所以亲自尝试一下它。 
    * V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。 
    * <C-V>:按块选择。非常强大,只在很少的编辑器中才有这样的功能。你可以选择一个矩形块,并且在这个矩形里面的文本会被高亮。 
在选择模式的时候使用上面所述的方向键和命令(motion)。比如,vwww,会高亮光标前面的三个词。Vjj 将会高亮当前行以及下面两行。 
一旦你高亮了选区,你或许想进行一些操作: 
    * d:剪贴选择的内容到剪贴板。 
    * y:拷贝选择的内容到剪贴板。 
    * c:剪贴选择的内容到剪贴板并且进入插入模式。 
如果你很清楚的知道你想拷贝或者剪切什么,那你根本就不需要进入可视选择模式。这样也会节省时间: 
    * d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。 
    * y{motion}:和上面类似,不过是拷贝。 
    * c{motion}:和 d{motion} 类似,不过最后进入插入模式。 
    * dd:剪切当前行。 
    * yy:拷贝当前行。 
    * cc:剪切当前行并且进入插入模式。 
    * D:剪切从光标位置到行尾到剪贴板。 
    * Y:拷贝当前行。 
    * C:和 D 类似,最后进入插入模式。 
    * x:剪切当前字符到剪贴板。 
    * s:和x类似,不过最后进入插入模式。 
    y+y    将光标目前所在的位置整行复制 
    y+w    复制光标所在的位置到整个单词所在的位置 
    n+y+w    若按3yw,则会将光标所在位置到单词结束以及后面两个单词(共3个单词)一起复制 
    n+y+y    若按3yy,则将连同光标所在位置的一行与下面两行一起复制 
      
粘贴很简单,按 p。 
  
使用多重剪贴板 
很多编辑器都只提供了一个剪贴板。VIM 有很多。剪贴板在 VIM 里面被称为寄存器(Registers)。你可以列出当前定义的所有寄存器名和它们的内容,命令为“:reg”。最好使用小写字母来作为寄存器的名称,因 为大写的有些被 VIM 占用了。使用寄存器的命令为双引号 “。 
比如:我们要拷贝当前行到寄存器 k。你应该按 “kyy。(你也可以使用 V”ky。为什么这样也可以呢?)现在当前行应该已经存在了寄存器 k 里面直到你又拷贝了一些东西进入寄存器 k。现在你可以使用命令 “kp 来粘贴寄存器 k 里面的内容到你想要的位置。 
  
vim中常用的删除文本命令: 
    d+左方向键        连续按d和左方向键,将光标所在位置前一个字符删除 
    d+右方向键        将光标所在位置字符删除 
    d+上方向键        将光标所在位置行与其上一行同时删除 
    d+下方向键        将光标所在位置与下一行同时删除 
    d+d            连按两次d,可将光标所在的行删除,若是连续删除,可以按住d不放 
    d+w            删除光标所在位置的单词,若是光标在两个字之间,则删除光标后面的一个字符 
    n+d+d            删除包括光标所在行及乡下的n行 
    n+d+上方向键    删除包括光标所在行及向上的n行 
    n+d+下方向键    同n+d+d命令 
    D                将光标所在行后面所有的单词删除 
    x                将光标所在位置后一个字符删除 
    X                将光标所在位置前一个字符删除 
    n+x            删除光标所在位置及其后的n个字符 
    n+X            删除光标所在位置及其前的n个字符 
  
vim中常用的找出行数的命令: 
    Ctrl+g    在最后一行中显示光标所在位置的行数及文章的总行数 
    nG            将光标移至n行 
    r            修改光标所在字符 
    R            修改光标所在位置的字符,可以一直替换字符,知道按下ESC键 
    u            表示复原功能 
    U            取消对行所作的所有改变 
    .            重复执行上一命令 
    Z+Z        连续按下两次Z,文件将保存并退出vim 
    %            符号匹配功能,在编辑时,如果输入"%(",系统会自动匹配相应的")" #这功能在ubuntu中我没有实现,不知道谁能解释一下 
                #可以用/代替% 
  
vim中搜索及替换命令 : 
/pattern:从光标开始处向文件尾搜索pattern 
?pattern:从光标开始处向文件首搜索pattern 
n:在同一方向重复上一次搜索命令 
N:在反方向上重复上一次搜索命令 
:s/p1/p2/g:将当前行中所有p1均用p2替代 
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代 
:g/p1/s//p2/g:将文件中所有p1均用p2替换   
  
vim中命令行模式切换到输入模式,进行插入: 
    * i:在当前字符的左边插入 
    * I:在当前行首插入 
    * a:在当前字符的右边插入 
    * A:在当前行尾插入 
    * o:在当前行下面插入一个新行 
    * O:在当前行上面插入一个新行 
    * c{motion}:删除 motion 命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包 括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。 
    * d{motion}:和上面差不多,但是不进入插入模式。 
使用数字也是 VIM 强大的而且很节省时间的重要特性之一。在很多 VIM 的命令之前都可以使用一个数字,这个数字将会告诉 VIM 这个命令需要执行几次。比如: 
    * 3j 将会把光标向下移动三行。 
    * 10dd 将会删除十行。 
    * y3″ 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。 
数字是扩展 motion 命令作用域非常有效的方法。 
  
vim最后行模式主要的操作命令: 
    e            创建新的文件 
    n            加载新的文件 
    w            写文件,也就是将编辑的内容保存到文件系统中。主要它是保存到临时文件中,直接退出,他并没有保存到文件中的 
    w!            如果想写只读文件,使用它强制写入文件 
    q!            不问你是否保存文件,强制退出 
    set nu    set 可以设置vim的某些特性,这里是设置每行开头提示行数。想取消设置,使用命令 set none
    /            查找匹配字符串功能。如/(,将查找(和);如果想继续向下查找,可以按n键;向前继续查找则按N键 
    ?            与/相似,但它是向前查找字符串 
  
vim的注意事项: 
1,当你不知道你是处于编辑方式还是命令方式时,可以使用Esc键退出命令方式,然后进行操作。 
  
2,在使用vim时,万一发生了系统掉电或者突然关机时,可以使用恢复命令,如编辑file文件时突然断电或系统崩溃后的恢复命令:$ vi file -r 
  
3.编程常用技巧: 
%      跳转到配对的括号去 
[[     跳转到代码块的开头去(但要求代码块中'{'必须单独占一行) 
]p    和 p 的功能差不多,但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置。试一下! 
>>    缩进所有选择的代码 
<<    和上面类似,但是反缩进 
gd    到达光标所在处函数或者变量的定义处。 
K    在 Man 里面查找光标当前所在处的词。 
''    跳转到光标上次停靠的地方, 是两个', 而不是一个" 
  
4.winmanager+ctags+taglist: 
$ctags -R    进行ctag标签的初始化或者是更新,自动补全需要。 
在源程序main.c不在tag目录时要进行以下操作: 
:set tags= /src/main.c 
  
  
<F1>      显示帮助 
<cr>     如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件 
-    返回上级目录 
c    切换vim 当前工作目录正在浏览的目录 
d    创建目录 
D    删除目录或文件 
i    切换显示方式 
R    文件或目录重命名 
s    选择排序方式 
x    定制浏览方式, 使用你指定的程序打开该文件 
  
5.自动补全 
TAB键补全 
Ctrl+X Ctrl+L    整行补全 
Ctrl+X Ctrl+N     根据当前文件里关键字补全 
Ctrl+X Ctrl+I     根据头文件内关键字补全 
Ctrl+X Ctrl+]     根据标签补全 
Ctrl+X Ctrl+F     补全文件名 
Ctrl+X Ctrl+D     补全宏定义 
Ctrl+X Ctrl+V     补全vim命令 
Ctrl+X Ctrl+U     用户自定义补全方式 
Ctrl+X Ctrl+S     拼写建议 
  
6.编译: 
VIM默认的设置为gcc的编译指令make, 
编译完成后显示信息, 
下面列出了命令 
编译 :make 
列出所有编译信息 :cl 
显示第一条信息 :cfirst 
显示最后一条信息 :clast 
显示第n条信息 :cc n  例如显示第5条 :cc 5 
显示下一条信息 :cn 
显示上一条 :cp 
如果此为错误信息,那么打回车,vim会自动把光标跳至错误行。 
  
7.其他 
   1、连续行注释 
  使用Vim/Vi编辑shell脚本,在进行调试的时候,需要进行多行的注释,每次都要先切换到插入模式,在行首输入注释符“#”,再退回命令模式,非常麻烦。其实如果要注释连续行,可在命令模式下执行,格式如下: 
  :起始行,终止行s/要替换字符/替换为新字符/g 
  如需注释第1行到第20行,可以执行:1,20s/^/#/g 
  其中“^”表示在行首插入,“#”为要插入的字符,“g”表示执行替换时不确认,若希望每行交互询问是否执行,可将“g”改为“c”。 
  
  2、非连续行注释(可以直接写在vimrc里面) 
  如果注释非连续的多行,可以定义快捷键简化,格式为: 
  :map 快捷键 执行命令 
  如定义快捷键Ctrl+P为在当前行行首添加“//”注释,可以执行: 
  :map ^P I// 
  “^P”为定义快捷键Ctrl+P,要注意先按“Ctrl+v”再按“Ctrl+p”; 
  
    常用的map有: 
   1. cmap handles command-line mappings. 
   2. imap handles insert-only mappings. 
   3. map maps keys in normal, visual, and operator-pending mode. 
   4. map! maps keys in Vim's command and insert modes. 
   5. nmap maps keys in normal mode only. 
   6. omap maps keys in operator-pending mode only. 
   7. vmap maps keys in visual mode only. 
  
    另一个例子是:map <F10> <Esc>:tabnew<CR>,这里面的Esc是手动输入的~<CR>相当于回车 
    我在搜索的时候喜欢vim的高亮显示,但是我想在任意一个时候得到上次搜索的高亮结果(编辑的时候关掉,查找的时候开启),那么我在vimrc里写一个函数: 
  
function ToggleHLSearch() 
       if &hls 
            set nohls 
       else 
            set hls 
       endif 
endfunction 
  
然后在后边在来一个映射:map <silent> <C-n> <Esc>:call ToggleHLSearch()<CR> 
这样就解决了这个随时打开高亮搜索功能的问题。 
  
  如果要取消此快捷键,只需输入命令: 
  :unmap ^P 
    想查看设置的快捷键,输入:map即可看到。 
  
  3、缩略语 
  原来输入经常用的信息可以如此简单, 
  :ab 替代符 原始信息 
  示例如下: 
  :ab sammail sam_helen@vip.163.com 
  执行之后,在输入模式下任何地方录入“sammail”,再敲任意字母符号或者回车空格,咔嚓一下,利马就变成“sam_helen@vip.163.com”,那真是相当的方便啊! 
   :iab XXX YYY 
    要是不想替代就在输入完后按Ctrl+&#173;v 
  
  4、可以直接在Vim/Vi中执行UNIX/Linux命令不需退出Vim/Vi  :!命令 
  
  5、可以直接将其他文件内容导入当前编辑文件中 
  格式为:r 文件名 
  如,需要导入文件/etc/issue的内容,执行:r /etc/issue 
  先举个例子,很多程序员喜欢写完程序后在注释中写入当前时间,我有个好办法即省事又快速还准确,只需要在命令模式下执行:r !date 
  当前时间就自动被导入了,任何命令的结果导入到当前编辑文件中,格式为 r !命令 
  
  5、助力编程的查询功能 
  以前在Linux系统下写一些C语言程序,有时记性不好,忘记了语法格式,使用Vim/Vi编写时可直接查询。如写程序写到fork时,突然失忆了 (失去了对这个东东的记忆),就可以直接把光标移动到fork上,按“K”(大写的K),直接就会跳到Linux程序员手册,看到fork的帮助,看完后 回车继续编写。 
  
   6、:h quickref 翻到VIM Quick Reference页(有用!)。 
   7、环境变量%表示当前文件名。 
   8、# 加密(小心使用,不要忘了密码) 
    :X                                : 然后vim会提示你输入密码 
    :wq 
   9.csupport的常用操作: 
  
  -- 注释操作 ----------------------------------------------------------- 
  
  /cl       end-of-line comment                 (n,v,i) 
  /cj       adjust end-of-line comment(s)       (n,v,i) 
  /cs       set end-of-line comment column      (n) 
  /c*       code -> comment /* */               (n,v) 
  /c/       code -> comment //                  (n,v) 
  /cc       code -> comment //                  (n,v) 
  /co       comment -> code                     (n,v) 
  /cfr      frame comment                       (n,i) 
  /cfu      function comment                    (n,i) 
  /cme      method description                  (n,i) 
  /ccl      class description                   (n,i) 
  /cd       date                                (n,i) 
  /ct       date /& time                        (n,i) 
  
  -- 常用结构 --------------------------------------------------------- 
  
  /sd       do { } while                        (n,v,i) 
  /sf       for                                 (n,i) 
  /sfo      for { }                             (n,v,i) 
  /si       if                                  (n,i) 
  /sif      if { }                              (n,v,i) 
  /sie      if else                             (n,v,i) 
  /sife     if { } else { }                     (n,v,i) 
  /sw       while                               (n,i) 
  /swh      while { }                           (n,v,i) 
  /ss       switch                              (n,v,i) 
  /sc       case                                (n,i) 
  /s{       { }                                 (n,v,i) 
  
  -- 预处理命令 ------------------------------------------------------- 
  
  /p<       #include <>                         (n,i) 
  /p"       #include ""                         (n,i) 
  /pd       #define                             (n,i) 
  /pu       #undef                              (n,i) 
  /pie      #if  #else #endif                   (n,v,i) 
  /pid      #ifdef #else #endif                 (n,v,i) 
  /pin      #ifndef #else #endif                (n,v,i) 
  /pind     #ifndef #def #endif                 (n,v,i) 
  /pi0      #if 0 #endif                        (n,v,i) 
  /pr0      remove #if 0 #endif                 (n,i) 
  /pe       #error                              (n,i) 
  /pl       #line                               (n,i) 
  /pp       #pragma                             (n,i) 
  
  -- 常用短语 ------------------------------------------------------------- 
  
  /if       function                            (n,v,i) 
  /isf      static function                     (n,v,i) 
  /im       main()                              (n,v,i) 
  /i0       for( x=0; x<n; x+=1 )               (n,v,i) 
  /in       for( x=n-1; x>=0; x-=1 )            (n,v,i) 
  /ie       enum   + typedef                    (n,i) 
  /is       struct + typedef                    (n,i) 
  /iu       union  + typedef                    (n,i) 
  /ip       printf()                            (n,i) 
  /isc      scanf()                             (n,i) 
  /ica      p=calloc()                          (n,i) 
  /ima      p=malloc()                          (n,i) 
  /isi      sizeof()                            (n,v,i) 
  /ias      assert()                            (n,v) 
  /ii       open input file                     (n,i) 
  /io       open output file                    (n,i) 
  
  -- 代码段支持----------------------------------------------------------- 
  
  /nr       read code snippet                   (n,i) 
  /nw       write code snippet                  (n,v,i) 
  /ne       edit code snippet                   (n,i) 
  /np       pick up prototype                   (n,v,i) 
  /ni       insert prototype(s)                 (n,i) 
  /nc       clear  prototype(s)                 (n,i) 
  /ns       show   prototype(s)                 (n,i) 
  /ntl      edit local templates                (n,i) 
  /ntg      edit global templates               (n,i) 
  /ntr      rebuild templates                   (n,i) 
  
  -- C++ ---------------------------------------------------------------- 
  
  /+c       class                               (n,i) 
  /+cn      class (using new)                   (n,i) 
  /+ci      class implementation                (n,i) 
  /+cni     class (using new) implementation    (n,i) 
  /+mi      method implementation               (n,i) 
  /+ai      accessor implementation             (n,i) 
  
  /+tc      template class                      (n,i) 
  /+tcn     template class (using new)          (n,i) 
  /+tci     template class implementation       (n,i) 
  /+tcni    template class (using new) impl.    (n,i) 
  /+tmi     template method implementation      (n,i) 
  /+tai     template accessor implementation    (n,i) 
  
  /+tf      template function                   (n,i) 
  /+ec      error class                         (n,i) 
  /+tr      try ... catch                       (n,v,i) 
  /+ca      catch                               (n,v,i) 
  /+c.      catch(...)                          (n,v,i) 
  
  -- 编译调试 ---------------------------------------------------------------- 
  
  /rc       save and compile                    (n,i) 
  /rl       link                                (n,i) 
  /rr       run                                 (n,i) 
  /ra       set comand line arguments           (n,i) 
  /rm       run make                            (n,i) 
  /rg       cmd. line arg. for make             (n,i) 
  /rp       run splint                          (n,i) 
  /ri       cmd. line arg. for splint           (n,i) 
  /rk       run CodeCheck (TM)                  (n,i) 
  /re       cmd. line arg. for CodeCheck (TM)   (n,i) 
  /rd       run indent                          (n,v,i) 
  /rh       hardcopy buffer                     (n,v,i) 
  /rs       show plugin settings                (n,i) 
  /rx       set xterm size                      (n, only Linux/UNIX & GUI) 
  /ro       change output destination           (n,i) 
  
常用个性化设置: 
全局变量 
  
  GLOBAL VARIABLE           DEFAULT VALUE                    TAG (see below) 
  
  g:C_GlobalTemplateFile     plugin_dir.'c-support/templates/Templates' 
  g:C_LocalTemplateFile      $HOME.'/.vim/c-support/templates/Templates' 
  g:C_TemplateOverwrittenMsg 'yes' 
  
  g:C_CodeSnippets          plugin_dir."/c-support/codesnippets/" 
  g:C_Dictionary_File       "" 
  g:C_LoadMenus             "yes" 
  g:C_MenuHeader            "yes" 
  g:C_OutputGvim            "vim" 
  g:C_XtermDefaults         "-fa courier -fs 12 -geometry 80x24" 
  g:C_Printheader           "%<%f%h%m%<  %=%{strftime('%x %X')}     Page %N" 
  
  Linux/UNIX: 
   g:C_ObjExtension         ".o" 
   g:C_ExeExtension         "" 
   g:C_CCompiler            "gcc" 
   g:C_CplusCompiler        "g++" 
  g:C_CFlags                "-Wall -g -O0 -c" 
  g:C_LFlags                "-Wall -g -O0" 
  g:C_Libs                  "-lm" 
  g:C_LineEndCommColDefault 49 
  g:C_CExtension            "c" 
  g:C_TypeOfH               "cpp" 
  
  g:C_CodeCheckExeName      "check" 
  g:C_CodeCheckOptions      "-K13" 
  
10.在你编辑你的电子邮件或者其他有段落的文本时,你可能会发现使用方向键和你预期的效果不一样,有时候可能会一次跳过了很多行。这是因为你的段落在 VIM 看来是一个大的长长的行。这时你可以在按 h、j、k 或者 l 之前键入一个 g,这样 VIM 就会按屏幕上面的行如你所愿的移动了。 
  
  
2.关于一些基本设置 
|:set|          :se[t]                    显示所有被改动的选项。 
参数 
'autoindent'      'ai'      根据上一行决定新行的缩进 
'cindent'         'cin'     实现 C 程序的缩进 
'cinkeys'         'cink'    设置 'cindent' 时启动缩进的键 
'cinoptions'      'cino'    设置 'cindent' 时如何缩进 
'cinwords'        'cinw'    'si' 和 'cin' 在这些词后加入额外的缩进 
'shiftwidth'      'sw'      (自动) 缩进使用的步进单位,以空白数目计 
'smarttab'        'sta'     插入 <Tab> 时使用 'shiftwidth' 
  
sample 
:set cin     实现 C 程序的缩进 
:set sw=4    设计(自动) 缩进使用4个空格 
:set sta     插入<tab>时使用'shiftwidth' 
:set backspace=2 指明在插入模式下可以使用<BS>删除光标前面的字符 
:set filetype=cpp 指定文件类型为C++,以便使用高亮关键字显示 
:syntax enable 设置高亮关键字显示 
  
怎么让vim在启动时自动设置? 
启动vim的时候使用vim -u /root/vimrc.vim 
Vim 会在启动的时候执行这个文件里的命令,并且使用:vertion可以查看到系统vimrc配置文件,用户vimrc配置文件等的路径 
  
怎样让vim自动缩排代码? 
将光标放在{处,按ESC到Normal模式,然后按v再按%就可以把大括号中内容选定,然后按=就可以按照C语言格式缩排 
%命令的作用是跳到匹配处,比如括号之间,C的宏指令#if #else #endif之间。 
  
“去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限 
set nocompatible 
“显示行号 
set nummber 
“检测文件的类型 
filetype on 
“记录历史的行数 
set history=1000 
“背景使用黑色 
set background=dark 
“语法高亮度显示 
syntax on 
“下面两行在进行编写代码时,在格式对起上很有用; 
“第一行,vim使用自动对起,也就是把当前行的对起格式应用到下一行; 
“第二行,依据上面的对起格式,智能的选择对起方式,对于类似C语言编写上很有用 
set autoindent 
set smartindent 
“第一行设置tab键为4个空格,第二行设置当行之间交错时使用4个空格 
set tabstop=4 
set shiftwidth=4 
“设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号 
set showmatch 
“当vim进行编辑时,如果命令错误,会发出一个响声,该设置去掉响声 
set vb t_vb= 
“在编辑过程中,在右下角显示光标位置的状态行 
set ruler 
“默认情况下,寻找匹配是高亮度显示的,该设置关闭高亮显示 
set nohls 
“查询时非常方便,如要查找book单词,当输入到/b时,会自动找到第一 
“个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依 
“次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词 
“时,别忘记回车 
set incsearch 
  
,输入左边括号"("后自动完成")",并把光标定位到两个括号中间 
:inoremap ( ()<ESC>i 
:inoremap ) <c-r>=ClosePair(')')<CR> 
:inoremap { {}<ESC>i 
:inoremap } <c-r>=ClosePair('}')<CR> 
:inoremap [ []<ESC>i 
:inoremap ] <c-r>=ClosePair(']')<CR> 
  
function ClosePair(char) 
if getline('.')[col('.') - 1] == a:char 
return "/<Right>" 
else 
return a:char 
endif 
endf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值