常用的vim命令总结(下)

简介: 常用的vim命令总结

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等。详见主页说明。


相关文章
|
6月前
|
机器学习/深度学习 开发工具
Vim的常用命令 基本使用
Vim的常用命令 基本使用
47 0
|
6月前
|
Linux 编译器 开发工具
Linux:详解(yum的使用、vim编辑器命令集合以及gcc/g++编译器的使用)
Linux:详解(yum的使用、vim编辑器命令集合以及gcc/g++编译器的使用)
191 1
|
6月前
|
NoSQL Linux 编译器
Linux:vim调试工具gdb | 常见命令集
Linux:vim调试工具gdb | 常见命令集
157 0
|
6月前
|
开发工具
Vim 模式切换 | 命令集
Vim 模式切换 | 命令集
116 0
|
3月前
|
Unix Linux 开发工具
在Linux中,有哪些基本的 Vim 命令?
在Linux中,有哪些基本的 Vim 命令?
|
30天前
|
Unix Linux 开发工具
Linux Vim的 命令大全
Linux Vim的 命令大全
20 0
|
2月前
|
存储 Linux Shell
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件
这篇文章介绍了Vim编辑器的基本使用、常用命令和模式,以及Linux系统中用户和组的管理方法,包括用户和组相关文件如/etc/passwd、/etc/shadow和/etc/group的说明。
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件
|
2月前
|
存储 Linux 编译器
linux中vim介绍以及常用命令大全
linux中vim介绍以及常用命令大全
76 8
|
3月前
|
开发工具
vim编辑器常用命令
vim编辑器常用命令
87 1
|
4月前
|
JSON Java Linux
linux 命令使用总结:vim,nohup,find,df,du,sudo,netstat,ll,curl,lastlog
linux 命令使用总结:vim,nohup,find,df,du,sudo,netstat,ll,curl,lastlog
66 5