vim

来源:互联网 发布:计算机网络 书籍 知乎 编辑:程序博客网 时间:2024/04/27 11:11

:help map.txt

# [esc, v, V, i]  按esc后进入命令模式,按v/V后进入选重模式,按i进入编辑模式

# [h, j, k, l] 命令模式下的前上下右键。
# [:e!]   不保存本次编辑,但不退出
# [:q!]   不保存本次编辑,退出
# [:wq]  保存本次编辑退出
# [:!sh]  在vim中暂时切换到shell下,可以采用ctrl + d命令回到vim中。
# [0, $]  移到行首和移到行尾。
# [c, d, y, p, x]  c是剪切,dd是删除一行,y是拷贝,p是粘贴, x是删除一个字符。
# [a, s, S]  前者为在当前光标后插入,后者为直接在当前光标处插入, 大s是输入文本替换当前行。
# [o, O]  小o是在当前行的下一行插入,大o是在当前行的上一行插入。
# [J, ~]  J合并当前行与下一行, ~是转换大小写。
# [u, ctrl+r] 恢复操作与从做操作。
# [ctrl+f, ctrl+b]  向前滚一屏,向后滚一屏。
# [/, ?, u, U]  /为向下搜索,?为向上搜索,u为查找下一个目标,U为查找上一个目标。
# [gg, G]  前者到文件开头,后者到文件结尾,nG是到文件的第多少行。
# [:%s/old/new/g]  全文替换,其中%相当与/1, $/, s为替换操作。 :%s/old/new/gc 可以一个一个替换。
# [:50, 100s/old/new/g]  从第50行替换到100行。
# [:%s/old1|old2|old3/new/g]  把old1, old2, old3一起全局替换成new.
# [:!shell_cmd]  在vim里执行shell command。
# [ggvG, ggdG, gg=G]  全选,全文删除,全文格式化。
# [%, '[[', '][']  %是当当前光标在一个{上时候,按%会自动匹配到另外的}, [[是光标回到本段开头的{, ][是匹配本段结尾的}
# [ctrl+], ctrl+o,ctrl+g]  ctrl+]是条转到光标所在的标识符定义的位置,ctrl+o是返回,ctrl+g是当你不知道当前你在那个文件里编辑的情况下,可以运行此命令,此操作一般需要tags文件。
# [gf, ctrl+o]  当写c/c++程序时候,可以在一个源文件中把光标放在某个头文件上(包括系统定义和自定义的头文件), 然后输入gf命令,可以条转到该头文件中。ctrl+o是返回操作。
# [shift+nk]  当写c/c++程序的时候, 可以把光标放在某个系统函数上,然后按shift+k就可以直接进入其man帮助页面,如果该方法的需要man 2 function,则可以shift 2k输入。按q命令推出man页面,回到原始vim编辑的文件。
# [:%!xxd]  把当前文件转化成16进制,xxd -b二进制,xxd -E 8421表示。[:%!xxd -r]恢复正常显示
# [gUG, guG, g~G]  所有字母大写变小写,所有字母小写变大写,所有字母大小写互换。
# [:new file, ctrl+w+w]  多文件编辑,按ctrl+w+w循环切换操作窗口。 :sp :vs
# [=, .]  =是把当前选重的行进行格式化,.是重复上次操作。
# [:set nu, :set list]  前者是设置显示行号,后者是设置显示文件中不可见字符。取消用nonu, nolist.
# [:make, :cl, :cc n, esc]  make命令是编译c/c++源文件命令,cl是编译后,查看编译输出的命令,一般是编译出现错误的时候用到,cc n是跳到第几个错误所在行,一般要结合cl查看一下错误的号码,然后调用cc n.  esc命令是当make执行完后,按esc可以直接跳到第一个错误所在行。如果想了解更多错误信息,可以看cl.   
# [:!bc]  在vim里调用计算器,可以进行计算,当bc quit后,按q可以回到原先vim编辑页.

关于vim,ctags的一个小技巧
vim可以使用ctags制作的tags文件来浏览程序源文件。问题是,当源文件存放在目录树(也就是所谓的source tree)的时候,该怎么办呢?
在缺省情况下,ctags只会处理当前目录里的源文件,而且vim也只会参考当前目录的tags文件。这时候,如果当前目录里的源文件引用了其他目录里的定义,那么vim就无法利用tags文件自动跳转了。解决这个问题主要依靠两个技巧:
一,在目录树的根目录里,使用命令:
    ctags -R 或 ctags --recurse
这两个命令应该是等效的,但是在我目前使用的 ctags(版本5.5.4),ctags -R似乎无效。--recurse参数会让ctags遍历整个目录树,分析所有子目录里的文件。最后形成的tags文件会放在根目录里。
二,编辑vim的设置文件(_vimrc或.vimrc),添加两行
    set tags=tags;
    set autochdir
注意第一个命令里的分号是必不可少的。这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,或者没有找到对应的目标,就到父目录中查找,一直向上递归。因为 tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。
使用这两个技巧后,就可以在目录树中自由的浏览源程序了。
另外,几个相关的话题:一个是,我发现用这种方法跳转到别的目录,只对ctrl-]和g ctrl-]有效果,而:ta或:ts命令,却还是只使用当前目录的tags文件,不知道这算不算是vim的bug。
另外,就算是在根目录使用了ctags命令,最好也还是在常用的目录里再使用一次ctags命令。因为vim总是首先在当前目录中寻找tags 文件,所以如果第一次搜索就能找到的话,那么速度就会快多了。
另外一个话题是,尽管用g ctrl-]来跳转是非常方便的命令,但是因为这个命令要搜索整个tags文件来找出所有的匹配定义,所以速度上就比只找出第一个定义的ctrl-]要慢多了。如果对于定义比较确定的话,那么最好还是用ctrl-]来执行吧。

再附上一个更牛逼的:http://coolshell.cn/articles/5426.html



原创粉丝点击