一个程序员的Vim

来源:互联网 发布:模拟人生3社交网络 编辑:程序博客网 时间:2024/05/21 17:35

1 调用gcc

    过去在使用vim编写程序时,时不时需要保存退出,然后使用gcc去编译程序。如果这个切换的频率比较高,那么就非常的麻烦。今天开始,这个问题就不在是问题啦。

    根据参考资料[1]的提示,vim可以直接调用linux的其它命令,比如cd、ls、gcc......下面是具体操作实例。

(1) 为了使得vim能自动转到当前目录,在.vimrc中添加

set autochdir

(2)通过"!"调用linux命令

    在vim中,可以通过"!"来调用任何linux命令(包括vim!):

:!ls "显示当前目录下的文件:!vim filename " 使用vim打开filename文件(原来打开的那个文件还没有关闭,关闭这个新打开的文件,就可以返回到原来打开的那个)。

    使用下面的命令可以编译当前目录下的test.c:

:!gcc test.c

    使用下面的命令可以执行上面生成的可执行文件a.out(在当前目录下):

:!./a.out

2 分屏幕显示

(1) 打开/关闭一个分屏[5][8]

:split/vsplit            " 创建一个新屏,并且显示前一个屏的内容:new/vnew                     " 创建一个分屏,并且在新窗口创建文件:e filename              "关闭原来的文件,打开一个新的文件filename(可以和split/vsplit结合使用,先创建一个分屏,然后在分屏中打开一个新文件):split/vsplit filename   " 创建一个新屏,并且在新屏中打开名为filename的文件(相当于split/vsplit和e filename的组合)

(2) 关闭/取消分屏[5][6]

:close "退出当前分屏:q     "退出当前分屏:only  " 取消所有其它分屏

(3) 分屏间切换(”Ctrl“表示键盘上的Ctrl键)[5]

<Ctrl - W> + k/h     "跳转到上/左边的窗口(若为大写H,则是把当前窗口调至左方)<Ctrl - W> + j/l     "跳转到下/右边的窗口(类似于上)<Ctrl - W> + w       "在窗口之间跳转

    说明:

    a) 先同时按下Ctrl键和W键,然后松开,再单独按k/h、j/l、w即可(并非同时按住3个键!)。

    b) 关于在窗口中切换,可以使用4个方向键分别代替字母k,h,j和l。

(4) 分屏大小设置

    方法一:resize命令

:resize number
说明:number为一个整型数字。

    方法二:快捷键[19][20]

<Ctrl - W> + =" 所有分屏一样高[19]<Ctrl - W> + +" 增加分屏高度[19]<Ctrl - W> + -" 减少分屏高度[19]<Ctrl - W> + _" 分屏最大化[20]

3 Quickfix

    在vim中使用下面命令可以打开Quickfix窗口:

:cope
    QuickFix窗口可以显示make过程中的输出信息(错误、警告、提示)[10]。在vim中执行下面命令可以解析当前目录下的Makefile文件:

:make " 不需要感叹号"!"

    关闭Quikfix窗口的方法和上述关闭分屏的方法一样,Quikfix也就是一个分屏而已。

:q       “ 退出Quikfix窗口:close  ”关闭Quikfix窗口

4 多行注释[8]

(1)在Normal模式下(非编辑模式),按下以下快捷键将进入Visual Block模式(直接按v(小写)进入Visual,按V(大写)进入Visual  Line模式[11]):

<Ctrl-v/V>
(2)在Visual Block模式中,使用方向键可以控制选择的区域。

(3)选择好区域后,按下I键(大写状态下,否则要同时按下Shift键),即可对块进行编辑(光标移到块的第一个字符)。

(4)按Esc键,即可完成对整块的操作。

    使用这个方法可以在选定区域的行首添加注释符,从而实现多行注释。

5 缩进

(1)行缩进[15]

> + Enter      "Visual模式下缩进1行,Normal模式下,缩进2行> + 右         "Normal模式下,先按>键,然后按->键(右方向键),则只缩进当前光标所在行缩进行> + 下         "Normal模式下,先按>键,然后按下方向键,则当前光标所在行和下一行都缩进

(2) 块缩进[15]

    按v键(小写)进入Visual模式(不是Visual Line,也不是Visual Block),然后选中要缩进的行,接着按:

> "同时按Shift键和>键,增加缩进< "同时按Shitf键和<键,减少缩进

(3)多行缩进[15]

5> "当前光标以下的5行都增加缩进5< "当前光标以下的5行都减少缩进

(4) 设置缩进的宽度

    默认情况下tab键和>键都是缩进8个空格的宽度,但是编程时通常使用的是4个空格的宽度,在~/.vimrc中添加:

set ts=4 " tab 键的默认宽度是8,要改为4set shiftwidth=4 " > 键和自动缩进的宽度,默认为8,这里该为4,编程需要

6 同时显示编辑页面和程序执行结果

    程序编译好后,可以运行看输出结果,但这是如果关闭了程序源文件,那么结果和程序之间的对应关系就不用容易分析。上面介绍Quickfix的时候,只能看到编译的信息,而不能看到程序执行的结果。参考资料[9]介绍了一种使用gdb的方法,但总感觉不够方便。下面是我根据网上的一些资料,总结出来的一个方法。

(1) 创建一个空白分屏

    用第二节提到的方法,vim打开程序文件后创建一个空白分屏,用于显示程序的运行结果。

:new

(2) 执行程序

    在将光标移动到空白分屏,然后以以下方式在vim中调用编译好的程序:

:r!./hello

    这时候,hello程序的输出结果将会显示到空白分屏上[14]。

    除了使用vim的分屏功能,还可以借助screen来进行终端分屏,可以达到更好的效果,详见《Ubuntu14.04中使用screen》。

7 移动光标[8]

0  "数字零,到行头$  "到本行行尾^  "到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)g_ "到本行最后一个不是blank字符的位置。

8 跳转与回跳[23]

    借助ctags生成的tags,可以实现在函数之间跳转:

(1)快捷键

Ctrl + ] —— 跳转到当前光标处符号(函数/变量)的定义处;

g + ] —— 先按g键,然后按]键,列出当前光标处符号的所有标签,可通序号选择跳转到特定的位置;
Ctrl + T —— 回跳到前一个位置;
Ctrl + O —— 同上;
CtrlW + —— 新窗口显示当前光标下单词的标签,光标跳到标签处。当有多个定义时候,不会提示!需要通过tselect命令查询;

Ctrl+W + }  —— 预览窗口显示当前光标下单词的标签,光标跳到标签处;

(2)命令

:tselect TagName —— 显示符号的定义列表,可通过其前面标号进行选择,然后跳转到该定义处。

:tags —— 当一个标签有多个匹配项时(函数 (或类中的方法) 被多次定义)该命令会跳转到第一处,如果在当前文件中存在匹配,那它将会被首先使用。

:tfirst  ——  到第一个匹配

:[count]tprevious —— 向前 [count] 个匹配

:[count]tnext  —— 向后 [count] 个匹配

:tlast   —— 到最后一个匹配

:ptag TagName —— 预览窗口显示TagName标签,光标跳到标签处

:pclose   —— 关闭预览窗口

:pedit file.h —— 在预览窗口中编辑文件file.h(在编辑头文件时很有用)

:psearch atoi —— 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。

9 记录上次浏览位置

    打开一个文件,自动定位到上次的浏览位置[16]。在~/.vimrc中添加:

if has("autocmd")  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endifendif

    其实上面的内容在/etc/vim/vimrc中,只是被注释了而已,将它复制到~/.vimrc中,去掉注释符即可。

10 Taglist_函数、变量和宏的清单

    在阅读大型的程序时,涉及的函数、变量和宏非常多,这时候就需要有个列表。Taglist这时可以帮得上忙。在使用之前,先要安装Taglist插件。安装方法在《Ubuntu10.04的vim插件扩展》的参考资料中有提到,单都是在没有使用Vundle进行插件管理的情况下进行安装的。这里主要说一下如何使用Vundle管理Taglist插件。

    首先在~/.vimrc中添加:

Bundle 'Taglist'
    这时候,如果使用Vundle的自动更新插件的功能,会提示在gighub中找不到Taglist。这时别慌,到这里下载Taglist.zip即可。

    然后在~/.vim/bundle(Vundle管理的插件都放在这里)中创建一个目录Taglist,然后将Taglist.zip解压到这里即可。这时候使用Vundle的自动更新功能,依然会提示一些错误信息(如Taglist目录不为空...)。但是没有关系,我们现在不用更新,而且Taglist已经可以正常工作了。

   使用vim打开一个*.c文件,在vim的命令输入模式下,输入一下命令,即可在窗口的左侧显示当前*.c中的函数、变量和宏的清单。

:Tlist

    需要提示的是,Taglist并不需要ctags生成的tags。另外,在Taglist窗口和程序窗口之间的切换,同第二小节中说的分屏之间的切换。

11  跳转到指定行

   在命令模式下,直接输入数字,然后回车,即可跳转到指定的行[18]。

:n

12 设置字体大小[19]

<Ctrl - -> " 减小字体<Ctrl - +> " 增大字体

13 多文件切换[21]

:ls "查看当前打开的buffer(文件):b num "切换文件(其中num为buffer list中的编号):bn " -- next buffer in the buffer list:bp " -- previous buffer in the buffer list:b# " -- previous buffer you was in

14 多标签切换[22]

:tabnew [++opt选项] [+cmd] file  “建立对指定文件新的tab:tabc   ”关闭当前的tab:tabo   “关闭所有其他的tab:tabs    ”查看所有打开的tab:tabp    “前一个标签:tabn    ”后一个标签:tabs    "列举所有标签

参考资料

[1]gcc配置和vim编程

[2]vim开两个窗口,一个看程序,一个gcc编译,调试怎么弄? 谢谢

[3]简单配置VIM+GDB调试

[4]vim+gdb+ddd+xxgdb精彩的程序调试

[5]vim分屏显示

[6]Vim的分屏技巧的使用

[7]vimbook

[8]简明 Vim 练级攻略

[9]使用VIM开发软件项目 - (15) 在VIM中使用GDB调试 (一)

[10]vi/vim使用进阶: 剑不离手 – quickfix

[11]Vim块操作

[12]vim visual block

[13]vim-可视化操作

[14]使用vim在文件中插入命令执行的输出结果

[15]vim多行增加缩进

[16]vim自动打开跳到上次的光标位置

[17]打造自己的vim界面--用winmanager合并显示NERDTree和TagList

[18]vim跳转到指定的行

[19]vim分屏快捷键使用/增大/减小字体使用

[20]VIM操作命令

[21]Vim多文件切换

[22]Vim(2):多标签切换|窗口拆分-tabnew

[23]将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)

[24]vim查看函数原型

0 0