u Undo,回到上次的内容
Ctrl+r Redo
:earlier 4m 显示 4 分钟前的文本状态
:later 45s 显示 45 秒之后的文本状态
:undo 5 Undo 5 次
:undolist 查看 undo 的列表
:help undolist 查看关于 undo 列表的说明信息
:help undo-redo/usr_32.txt 查看关于 undo 和 redo 的帮助文档
/something 在文档中搜索匹配"something"的部分
n 在搜索结果中跳至下一个匹配的搜索结果
N 在搜索结果中回到上一个匹配的搜索结果
/\<something\> 搜索只匹配"something"的部分,其中"something"独立,不能为某个单词的一部分
/\d 搜索文档中的数字,以一个数字为单位来匹配结果
/\d\+ 搜索文档中的数字,以一个数字或者多个数字为单位来匹配结果
:set foldmethod=indent 将前后缩进的文本尽心折叠处理,相同缩进被折叠在一起
zc 将光标所在行及其之后相同缩进的文本折叠起来,不予显示
zo 将光标所在行及其之后相同缩进的文本展开,显示其完整信息
za 具有zc和zo相同的功能,折叠时用于打开文本,打开时用于折叠文本
:help folding 显示与折叠相关的帮助信息
:b 1 转到缓冲区 1 中的文件
:bd 1 删除缓冲区 1 中的文件
:buffers/:ls 显示所有缓冲区中的文件列表
:help buffer-list 显示与缓冲区有关的帮助信息
:new 将当前屏幕(视角)分割,并创建一个新的未命名的缓冲区
:w test.txt 将当前缓冲区保存为 test.txt,如果该缓冲区为已经存在的文件,则用给定文件名创建一个副本
Ctrl+w <方向键h,j,k,l> 在不同屏幕,即不同缓冲区之间切换
Ctrl+w Ctrl+w 在不同缓冲区之间进行切换
:sp/Ctrl+w s 将当前屏幕(视角)水平分割
:vsp/Ctrl+w v 将当前屏幕(视角)垂直分割
Ctrl+w r 旋转视角,即将两个视角位置互换
Ctrl+w K 将当前视角(缓冲区)放到最高的位置,其他视角向下移动
:resize 10 以行为单位重新调整当前视角的长度,如 :resize 10 表示将当前视角调整为10行
Ctrl+w _ 将当前视角调整为最大,其他视角压缩大小
Ctrl+w = 将所有视角的高度调整为相等
:help windows 查看与视角相关的帮助文档
:tabnew 创建一个新的缓冲区,并在一个新的标签页上打开
:tabc/:q 关闭当前标签页
:tabmov 调整各个标签页的顺序
:tabmov 0 将当前标签页调整到第 1 的位置
:tab help something 在新的标签页上显示某个条目的帮助文档
Ctrl+Tab 在屏幕上不同分屏处进行切换
生活的脚步,技术的点滴...
quickfix提高vim编程编译调试效率
以前使用vim编程时,在终端下面至少2个tab,一个编辑一个编译,编译出错时,切换到编辑tab页进行差错纠正。今天又学习了vim的quickfix模式,quickfix是vim自带的,无需插件。
vim由一个程序员开发,而且为更多的程序员所使用,所以在vim中加强了对软件开发的支持,quickfix模式的引入就是一个例子。所谓quickfix模式,它和Normal模式、Insert模式没什么关系,它只是一种加快你开发速度的工作方式。
Quickfix模式的主要思想是保存一个位置列表,然后提供一系列命令,实现在这个位置列表中跳转。
位置列表的产生可以从编译器的编译输出信息中获得,也可以由grep命令的输出信息中获得。
[编译]
通常,我们在开发过程中,经常要写代码,编译,修改编译错误,这个过程会数十遍上百遍的重复。如果你是根据编译器输出的错误信息,打开出错的文件,找到出错的行,然后再开始修改,那效率未免太低下了。
利用vim的quickfix模式,可以大大加快这一过程,你可以在vim启动编译,然后vim会根据编译器输出的错误信息,自动跳到第一个出错的地方,让你进行修改;修改完后,使用一个快捷键,跳到下一个错误处,再进行修改,方便的很。
为了做到这一点,你首先要定义编译时所使用的程序,对大多数使用Makefile的项目来说,vim的缺省设置"make"已经可以满足要求了。如果你的项目需要用一个特殊的程序进行编译,就需要修改'makeprg'选项的值。
大家在学编程时大概都读过"hello world"程序,我们就以这个简单的例子为例,讲一下quickfix模式的用法。
该程序的内容如下,里面包含了三个小小的错误:
/* hello world demo */ #include <stdio.h" int main(int argc, char **argv) { int i; print("hello world\n"); return 0; }
输入编译命令了:
:make
在使用":make"时,vim会自动编译,并把编译输出重定向到一个临时文件中,当编译出现错误时,vim会从上述临时文件中读出错误信息,根据这些信息形成quickfix列表,并跳转到第一个错误出现的地方。
对于我们上面的程序来说,光标会停在第三行,也就是第一个出错的位置,vim同时会提示出错信息。如果你没看清出错信息,可以输入":cc"命令,vim会更次显示此信息,或者干脆使用":cw"命令,打开一个quickfix窗口,把所有的出错信息显示出来,见下图:
现在我们知道错在哪儿了,修正一下,然后使用":cn"命令(或者在Quickfix List对应行上输入回车)跳到下一个出错的地方,以此类推,直到修正全部错误。
好了,千辛万苦,我们的hello world终于工作了。乍一看这个例子,似乎Quickfix并没有提高什么效率,但如果你的错误出现在多个不同目录的不同文件里,它可以帮你省很多时间,使你可以集中精力在修正bug上。
vim可以同时记住最新的10个错误列表,也就是说你最近10次使用":make"命令编译所遇到的错误都保存着,可以使用":colder"和":cnewer"命令,回到旧的错误列表,或者到更新的错误列表。
在quickfix模式里经常用到的命令有:
:cc 显示详细错误信息 ( :help :cc )
:cp 跳到上一个错误 ( :help :cp )
:cn 跳到下一个错误 ( :help :cn )
:cl 列出所有错误 ( :help :cl )
:cw 如果有错误列表,则打开quickfix窗口 ( :help :cw )
:col 到前一个旧的错误列表 ( :help :col )
:cnew 到后一个较新的错误列表 ( :help :cnew )
更多的命令,以及这些命令更详细的解释,请参见手册。
对于经常用到的命令,最好提供更方便的使用方法,在我的vimrc中的定义:
autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>
nmap <leader>cn :cn<cr>
nmap <leader>cp :cp<cr>
nmap <leader>cw :cw 10<cr>
现在使用",<space>"(先按,再按空格)就可以编译,使用",cp"和",cn"跳到上一个和下一个错误,使用",cw"来打开一个quickfix窗口。这下顺手多了!
如果你希望跳转到出错的文件时,使用一个分隔的窗口打开,请参阅'switchbuf'选项的值。
在vim7中,每个窗口都可以拥有自己的位置列表,这样,你就能够同时打开多个位置列表了,而quickfix列表在整个vim中只有一个。你可以使用位置列表来显示编译错误信息,具体命令参阅手册:":help location-list"以及":help :lmake"。
结合文章http://dongpingli.blogspot.com/2009/03/makefile_27.html编写的通用makefile,这下在写新程序时,直接copy makefile到程序目录,在vim里面写完程序后直接make,然后查错修改在一个tab下,省得来回tab切换,效率会提高不少。
http://www.cnblogs.com/lidp/articles/1696053.html
vim的taglist的确很好用.
http://hi.baidu.com/tjuer/item/638a9bb045a32197194697b0
http://www.cnblogs.com/mo-beifeng/archive/2011/11/22/2259356.html
今天发现在vim中浏览代码不太方便, 每次总是需要搜索函数名。只好去试试传说中的taglist插件了! 用完后发现,taglist的确不错,很方便. 下面是安装的步骤和简单的使用入门介绍.
1> taglist的安装.
推荐文章: (按照上面的步骤一步一步走就行了)
http://vim-taglist.sourceforge.net/installation.html
http://www.vim.org/scripts/script.php?script_id=273 (含官方下载地址)
2> 简单配置和上手入门
为了使用方便,建议修改一些设置选项. (在.vimrc中设置)
常见的设置有:
★ let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的
★ let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim
★ let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口
下面介绍常用的taglist配置选项,你可以根据自己的习惯进行配置:
- Tlist_Ctags_Cmd选项用于指定你的Exuberant ctags程序的位置,如果它没在你PATH变量所定义的路径中,需要使用此选项设置一下;
- 如果你不想同时显示多个文件中的tag,设置Tlist_Show_One_File为1。缺省为显示多个文件中的tag;
- 设置Tlist_Sort_Type为”name”可以使taglist以tag名字进行排序,缺省是按tag在文件中出现的顺序进行排序。按tag出现的范围(即所属的namespace或class)排序,已经加入taglist的TODO List,但尚未支持;
- 如果你在想taglist窗口是最后一个窗口时退出VIM,设置Tlist_Exit_OnlyWindow为1;(very useful ~~~)
- 如果你想taglist窗口出现在右侧,设置Tlist_Use_Right_Window为1。缺省显示在左侧。
- 在gvim中,如果你想显示taglist菜单,设置Tlist_Show_Menu为1。你可以使用Tlist_Max_Submenu_Items和Tlist_Max_Tag_Length来控制菜单条目数和所显示tag名字的长度;
- 缺省情况下,在双击一个tag时,才会跳到该tag定义的位置,如果你想单击tag就跳转,设置Tlist_Use_SingleClick为1;
- 如果你想在启动VIM后,自动打开taglist窗口,设置Tlist_Auto_Open为1;
- 如果你希望在选择了tag后自动关闭taglist窗口,设置Tlist_Close_On_Select为1;(这个应该比较方便,好用)
- 当同时显示多个文件中的tag时,设置Tlist_File_Fold_Auto_Close为1,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来。(这个也不错! )
- 在使用:TlistToggle打开taglist窗口时,如果希望输入焦点在taglist窗口中,设置Tlist_GainFocus_On_ToggleOpen为1;(useful~~)
- 如果希望taglist始终解析文件中的tag,不管taglist窗口有没有打开,设置Tlist_Process_File_Always为1;
- Tlist_WinHeight和Tlist_WinWidth可以设置taglist窗口的高度和宽度。Tlist_Use_Horiz_Window为1设置taglist窗口横向显示;
在taglist窗口中,可以使用下面的快捷键:
<CR> 跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
o 在一个新打开的窗口中显示光标下tag
<Space> 显示光标下tag的原型定义
u 更新taglist窗口中的tag
s 更改排序方式,在按名字排序和按出现顺序排序间切换
x taglist窗口放大和缩小,方便查看较长的tag
+ 打开一个折叠,同zo
- 将tag折叠起来,同zc
* 打开所有的折叠,同zR
= 将所有tag折叠起来,同zM
[[ 跳到前一个文件
]] 跳到后一个文件
q 关闭taglist窗口
<F1> 显示帮助
可以用“:TlistOpen”打开taglist窗口,用“:TlistClose”关闭taglist窗口。或者使用“:TlistToggle”在打开和关闭间切换。
在我的.vimrc中定义了下面的映射,使用“,tl”键就可以打开/关闭taglist窗口:
map <silent> <leader>tl :TlistToggle<cr>
本文参考 http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx在此表示感谢。
首先在建立~/.vim,以后所有的插件都存放在此。在.vim下分别建立doc、syntax、plugin三个文件夹分别存放插件帮助文档、语法文件、插件。
1、ctags
软件功能:用于产生一个tags文件(代码索引文件),tags文件中记录的源文件的索引以帮助你快速得找到某个符号的定义。它支持相当多的语言,如C、C++、C#、Shell等等。后面所有的包括函数列表显示,变量定义跳转,自动补全等,都要依赖于它。
ctags的全名叫做“Exuberant Ctags”,可以从新立得里面找到。
可以通过在vim中输入
:!ctags -R
在当前路径下建立一个tags文件,然后就可以在vim中使用跳转功能了。其中的-R选项是递归搜索子目录下的相关符号。所谓跳转就是可以随时转到自己想要的函数、类型、结构体、类等等的定义处。比如光标处于任意位置时可以普通模式下输入
:ta func_name
就可以直接将光标定位到func_name函数处。当然,其他的命名也可以使用这种方法进行快速定位。另外就是可以在光标指向一个函数名时按下Ctrl+],马上跳转到这个函数的定义。在跳转到定义位置之后,可以按下Ctrl+o快速返回原来的编辑位置。
如果tags文件不再当前目录下则用 :set tags=filename 来指定。
PS:ctags是一个程序用于生成tags文件。tags文件是当前目录下所有源文件的标签链接文件。在一个没有ctags的vim中只是无法生成新的tags文件,但是已有的tags文件仍然可以使用。
2、taglist
下载地址: http://www.vim.org/scripts/script.php?script_id=273
在Vim的一个垂直或水平的分割窗口中显示一个文件中定义的tags(函数,类,结构,变量等)。
在.vimrc中加入如下设置:
"不同时显示多个文件的tag,只显示当前文件的 let Tlist_Show_One_File=1 "如果taglist窗口是最后一个窗口,则退出vim let Tlist_Exit_OnlyWindow=1
在vim中用如下命令打开taglist窗口
:Tlist
将taglist帮助文件放在~/.vim/doc目录下,如果需要使用:help taglist.txt命令查看帮助文档,需要事先在vim中执行如下命令:
:helptags ~/.vim/doc
使用:将光标移动到taglist窗口的tag上面,按回车即可跳转到此tag的定义处,如果只想查看此tag的完整名称表达,按空格。
3、WinManager
下载地址: http://www.vim.org/scripts/script.php?script_id=95
WinManager可以在vim中像taglist一样开一个窗口来浏览工程文件。其实vim自带了文件浏览的插件netrw.vim。只不过WinManager将taglist和netrw整合在了一起。在WinManager界面上可以用下面的一些命令来进行常用的目录和文件操作:
<F1> | 显示帮助 |
<cr> | 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件 |
- | 返回上级目录 |
c | 切换vim 当前工作目录正在浏览的目录 |
d | 创建目录 |
D | 删除目录或文件 |
i | 切换显示方式 |
R | 文件或目录重命名 |
s | 选择排序方式 |
x | 定制浏览方式, 使用你指定的程序打开该文件 |
在.vimrc中加入如下配置:
"设置WinManager与TagList的布局:前者在上,后者在下 let g:winManagerWindowLayout='FileExplorer|TagList' "映射WinManager快捷键,在normal模式下按wm,控制开启和关闭 nmap wm :WMToggle<CR>
4、MiniBufExplorer
下载地址: http://www.vim.org/scripts/script.php?script_id=159
简单的说就是标签页文件。当vim打开单个文件的时候,MiniBufExplorer没什么作用。当打开两个以上的文件时,MiniBufExplorer会在vim的上面打开一个新的窗口空间,列出了已经打开的文件。把光标放到这个窗口上面时,可以有如下的几个命令使用:
<Tab> | 向前循环切换到每个buffer名上 |
<S-Tab> | 向后循环切换到每个buffer名上 |
<Enter> | 在打开光标所在的buffer |
d | 删除光标所在的buffer |
下面的两个功能需要在.vimrc中加入:
let g:miniBufExplMapCTabSwitchBufs = 1
<C-Tab> | 向前循环切换到每个buffer上,并在但前窗口打开 |
<C-S-Tab> | 向后循环切换到每个buffer上,并在但前窗口打开 |
如果在.vimrc中设置了下面这句:
let g:miniBufExplMapWindowNavVim=1
则可以用<C-h,j,k,l>切换到上下左右的窗口中去,就像:
C-w,h j k l 向"左,下,上,右"切换窗口.
在.vimrc中设置:
let g:miniBufExplMapWindowNavArrows=1
是用<C-箭头键>切换到上下左右窗口中去.
主要命令:
:MiniBufExplorer " Open and/or goto Explorer
:CMiniBufExplorer " Close the Explorer if it's open
:UMiniBufExplorer " Update Explorer without navigating
:TMiniBufExplorer " Toggle the Explorer window open and closed.
5、在工程中查找——Grep
下载地址: http://www.vim.org/scripts/script.php?script_id=311
对光标所在的词来个全工程范围的grep。
:Grep | 按照指定的规则在指定的文件中查找 |
:Rgrep | 同上, 但是是递归的grep |
:GrepBuffer | 在所有打开的缓冲区中查找 |
:Bgrep | 同上 |
:GrepArgs | 在vim的argument filenames (:args)中查找 |
:Fgrep | 运行fgrep |
:Rfgrep | 运行递归的fgrep |
:Egrep | 运行egrep |
:Regrep | 运行递归的egrep |
:Agrep | 运行agrep |
:Ragrep | 运行递归的agrep |
上面的命令是这样调用的:
:Grep [<grep_options>] [<search_pattern> [<file_name(s)>]] :Rgrep [<grep_options>] [<search_pattern> [<file_name(s)>]] :Fgrep [<grep_options>] [<search_pattern> [<file_name(s)>]] :Rfgrep [<grep_options>] [<search_pattern> [<file_name(s)>]] :Egrep [<grep_options>] [<search_pattern> [<file_name(s)>]] :Regrep [<grep_options>] [<search_pattern> [<file_name(s)>]] :Agrep [<grep_options>] [<search_pattern> [<file_name(s)>]] :Ragrep [<grep_options>] [<search_pattern> [<file_name(s)>]] :GrepBuffer [<grep_options>] [<search_pattern>] :Bgrep [<grep_options>] [<search_pattern>] :GrepArgs [<grep_options>] [<search_pattern>]
为了简化操作,在.vimrc中加入如下配置:
nnoremap <silent> <F3> :Rgrep<CR>
将光标移到需要查找的单词上面,按F3即可。比如查找ABC:
在最下面的命令行会显示:
Search for pattern: ABC
此时你还可以编辑该行, grep支持正则表达式。
按下回车后,在最下面的命令行会显示:
Search in files: *
是问搜索范围, 默认是该目录下的所有文件, 此时你还可以编辑该行, 比如你只想搜索源码文件:
Search in files: *.c *.h
然后在按下回车, 会在弹出的QuickFix窗口中列出所有符合条件的搜索结果, 你可以在其中查找你想要的结果。
6、NERD_commenter——添加注释
下载地址: http://www.vim.org/scripts/script.php?script_id=1218
<leader>cc 添加注释
<leader>cu 取消注释
7、Python代码折叠——python_ifold
下载地址: http://www.vim.org/scripts/script.php?script_id=2002
python_ifold是python_fold的改进版本。
可实现Python代码的折叠。打开Python脚本时会发现所有的代码已经折叠了,其中还现了折叠部分拥有的行数。在折叠的行按下zo可以打开折叠,按下zc会折叠上代码。python_ifold是默认启用的。
8、pydicton——python代码智能补全
下载地址: http://www.vim.org/scripts/script.php?script_id=850
pydiction-1.2中有四个文件,除了帮助文档和插件之外,还有两个分别是:complete-dict和pydiction.py。
其中complete-dict放在~/.vim/tools目录下。pydiction.py是可选文件,官网上的解释是:
Python script used to generate the dictionary. You can optionally run this script to add more modules to complete.
.vimrc中需要如下配置:
autocmd FileType python set complete+=k~/.vim/tools/complete-dict
9、NERD_tree
下载地址: http://www.vim.org/scripts/script.php?script_id=1658
由于WinManager的fileexplorer功能不能自动更新,相比之下NERD_tree就强大许多了。
10、AutoComplPop——自动提示
下载地址: http://www.vim.org/scripts/script.php?script_id=1879
解压之后会有三个文件夹,全部放到.vim目录下。特别是别忘了autoload这个目录下的acp.vim也要放到.vim相应的autoload目录下。
11、vimIM——vim的中文输入插件
下载地址: http://vimim.googlecode.com/svn/vimim/vimim.html
ctrl+\ 直接在vim中切换输入法。也可以输入英文,然后ctrl+6,显示中文。
12、auto-pairs——括号自动配对
下载地址: https://github.com/jiangmiao/auto-pairs
13、xml编辑插件——标签自动配对
下载地址: http://www.vim.org/scripts/script.php?script_id=1397
也支持html、xhtml、docbk、xsl等。详见主页说明。