vim中ide环境的搭建

1.在vim中加入table快捷键代码自动补全功能步骤

vim 中SuperTab的安装和使用

http://www.vim.org/scripts/script.php?script_id=1643下载安装版。这个安装包跟先前的几个Vim插件不同,它是一个vba文件,即Vimball格式的安装包,这种格式安装包提供傻瓜式的安装插件的方法。

       1)用Vim打开.vba安装包文件。

       2)在Vim命令行下运行命令“UseVimball ~/.vim”。此命令将安装包解压缩到~/.vim目录。VImball安装方式的便利之处在于你可以在任何目录打开.vba包安装,而不用切换到安装目的地目录。而且不用运行helptags命令安装帮助文档。

       3)在~/.vimrc文件中加入以下这行:

[html]  view plain copy print ?
  1. let g:SuperTabDefaultCompletionType="context"  


  2. 2.加入php自带函数的补全功能
  3. "只有在是PHP文件时,才启用PHP补全
      au FileType php call AddPHPFuncList()
      function AddPHPFuncList()
          set dictionary-=/home/chuanqi/soft/plugin/funclist.txt   dictionary+=/home/chuanqi/soft/plugin/
              set complete-=k complete+=k
         endfunction
  4. 3.加入"(","{","[" 自动补全 相应的右边符号
  5.    
  6.    

    很多现代 IDE 都有自动补全配对括号的功能,比如输入了左括号“(”,IDE 就自动在后面添加一个对应的右括号“)”,并且将光标移到括号中间。VIM 虽然没有直接提供这个功能,但要实现其实非常简单,只要在你的 .vimrc 文件中添加下面的内容就可以了:

    1" 插入匹配括号
    2inoremap ( ()<LEFT>
    3inoremap [ []<LEFT>
    4inoremap { {}<LEFT>

      原理很简单,就是将左括号的键映射为一个新的操作,在输入左括号时,让 VIM 立刻输入右括号,同时再将光标左移一格到括号中间。

      除了括号的自动补全,有时我们也需要括号的自动删除。比如在输入了左括号后突然发现输错了,本来只需要简单地按一下退格键,将刚才输入的左括号 删除就行了,但现在 VIM 自动加了一个右括号,退格键只能删除左括号,这个自动加上右括号还得按一下 DELETE 键才能删掉。

      所以,我们还需要一个功能,如果按退格键删除了左括号,那么也要自动地把对应的右括号删除。这个操作使用简单的键盘映射就有点难度了,需要借助函数,如下:

    01" 按退格键时判断当前光标前一个字符,如果是左括号,则删除对应的右括号以及括号中间的内容
    02function! RemovePairs()
    03    let s:line = getline(".")
    04    let s:previous_char = s:line[col(".")-1] " 取得当前光标前一个字符
    05 
    06    if index(["(", "[", "{"], s:previous_char) != -1
    07        execute "normal! v%xi"
    08    else
    09        execute "normal! a\<BS>"
    10    end
    11endfunction
    12" 用退格键删除一个左括号时同时删除对应的右括号
    13inoremap <BS> <ESC>:call RemovePairs()<CR>a

      注:上面这段后来被 weakdancer 指出了一些问题,经过考虑及测试之后,我把它改写为这样了:

    01" 按退格键时判断当前光标前一个字符,如果是左括号,则删除对应的右括号以及括号中间的内容
    02function! RemovePairs()
    03    let l:line = getline(".")
    04    let l:previous_char = l:line[col(".")-1] " 取得当前光标前一个字符
    05 
    06    if index(["(", "[", "{"], l:previous_char) != -1
    07        let l:original_pos = getpos(".")
    08        execute "normal %"
    09        let l:new_pos = getpos(".")
    10 
    11        " 如果没有匹配的右括号
    12        if l:original_pos == l:new_pos
    13            execute "normal! a\<BS>"
    14            return
    15        end
    16 
    17        let l:line2 = getline(".")
    18        if len(l:line2) == col(".")
    19            " 如果右括号是当前行最后一个字符
    20            execute "normal! v%xa"
    21        else
    22            " 如果右括号不是当前行最后一个字符
    23            execute "normal! v%xi"
    24        end
    25 
    26    else
    27        execute "normal! a\<BS>"
    28    end
    29endfunction
    30" 用退格键删除一个左括号时同时删除对应的右括号
    31inoremap <BS> <ESC>:call RemovePairs()<CR>a

      这样就比较完美了。不过在非括号时其实还有个小问题(比如“<行首>a<光标>bcde”这样的情况下,按了退格键后,“a”虽然被删除了,但光标不是移到行首,而是移到 b 的后面),但应该不会对使用造成太大影响。

      另外,在自动补全了右括号之后,如果用户再输入右括号会怎么样呢?一般来说,比较合理的做法似乎是忽略掉这个后输入的多余的右括号,直接将光标向右移到一格。代码如下:

    01" 输入一个字符时,如果下一个字符也是括号,则删除它,避免出现重复字符
    02function! RemoveNextDoubleChar(char)
    03    let l:line = getline(".")
    04    let l:next_char = l:line[col(".")] " 取得当前光标后一个字符
    05 
    06    if a:char == l:next_char
    07        execute "normal! l"
    08    else
    09        execute "normal! i" . a:char . ""
    10    end
    11endfunction
    12inoremap ) <ESC>:call RemoveNextDoubleChar(')')<CR>a
    13inoremap ] <ESC>:call RemoveNextDoubleChar(']')<CR>a
    14inoremap } <ESC>:call RemoveNextDoubleChar('}')<CR>a

      这样,在 VIM 中输入或删除括号就方便多了!

    此处是转载的文章。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值