vim技巧

分享vimrc: http://www.vimbits.com/

vim colorscheme: http://vimcolorschemetest.googlecode.com/svn/html/index-html.html

保存一个只有root可以写的文件

:w !sudo tee %

键盘映射:

编译选项: --disable-gui 不编译Gvim --enable-cscope 使用cscope --enable-multibyte 多字节(支持中文) --enable-gdb 支持gdb

quickfix使用:

  • :cc 显示详细错误信息
  • :cp 跳到上一个错误
  • :cn 跳到下一个错误
  • :cw 打开quickfix窗口

statusline配置:

  • - 左对齐。默认右对齐
  • m 是否修改的标记,修改的用[+]表示
  • 双引号时,转义,单引号不转义。

好用不常用快捷键

  • zz 当前行居中
  • zt 当前行置顶
  • zb 当前行置底
  • H 至屏幕顶行
  • M 至屏幕中央
  • L 至屏幕底行
  • ma 标记当前位置为a
  • ’a 跳到a标记处
  • '' 跳回上次行。

删除行尾空格 :1,$s/[ ]*$//g

删除匹配行 :g/table/d

插件:

Tlist

  1. 查看光标处系统函数man手册:
shift + k
  1. c代码折叠

对于如下风格的c代码:

void test() {

if(1) {
printf("hello\n");
} else {
printf("you should never see this.\n");
}

switch(ch) {
case 'a':
printf("hello\n");
break;
default:
printf("hello\n");
break;
}

while(1) {
if(1) {
break;
}
printf("you should never see this.\n");
}
}

折叠结果如下:

 1 void test() {
2
3 +--- 2 : if(1) {---------------------------------------------------
5 +--- 3 : } else {--------------------------------------------------
8
9 +--- 8 : switch(ch) {----------------------------------------------
17
18 +--- 6 : while(1) {------------------------------------------------
24 }

实现上述折叠的vim配置为:

function MyFoldfun(lineNum)
if getline(a:lineNum+1)=~'^{'
return 'a1'
elseif getline(a:lineNum)=~'^}'
return 's1'
elseif getline(a:lineNum+1)=~'.\+}.\+{'
return 's1'
elseif getline(a:lineNum)=~'.\+}.\+{'
return 'a1'
elseif getline(a:lineNum)=~'.\+}'
return 's1'
elseif getline(a:lineNum)=~'.\+{'
return 'a1'
elseif getline(a:lineNum)=~' \+case '
return 'a1'
elseif getline(a:lineNum+1)=~' \+case '
return 's1'
elseif getline(a:lineNum+1)=~' \+default:'
return 's1'
else
return '='
endif
endfunction

set foldexpr=MyFoldfun(v:lnum)

其中函数为设置缩进,最后一行设置折叠表达式为上述函数。

tagged by
comments powered by Disqus