常用的vim命令总结

2020-08-04 17:11:51 浏览数 (1)

vim就不多介绍了,很好用很强大。在windows下可以用gvim,配置一下_vimrc文件,再配合cscope和ctag等工具,就是一个功能强大的IDE。

常用的命令在这里总结下,以后忘了可以看看,部分摘自网络轻快的VIM和部分网摘。

首先记着它的三种模式,命令模式,插入模式,可视模式。

常用的命令:分类一下,无非是编辑相关的,移动,复制,粘贴,插入,删除等操作。

窗口相关的,多窗口,窗口分割和tab标签。

命令执行相关的以及配合cscope和ctag函数间查找和跳转的。

执行外部命令的,!make,find等等。。。

Vim的quickfix模式等等,可以方便的定位到编译的错误处。。

先来张截图:

首先是移动,

进入vim后键入: '0 即回到当初你编辑的位置 PS: 如果想把光标停止在指定的行, 这样 vim n urfile // n为行号 如果要停留在行尾, 这样 vim urfile 整行移动 0 移动到行首 $ 移动到行末 移动到下一行开头 - 移动到上一行开头 这里需要注意的是 -和上面的j k有什么不同之处 j k也是移动到上一行和下一行,但它们移动的是光标所在的位置 -不管你的光标在何处,总是移动到下一行或上一行的行首 单词移动 W w 移动到下一个单词开头 E e 移动到下一个单词结尾 B b 倒退到上一个单词开头 需要注意的是,E会忽略标点符号,如:I‘m,e会当成两个单词,E则不会 同样,在命令前加上数字代表执行次数,如:2w,表示往下移动2个单词

Ctrl f 往前滚动一整屏 Ctrl b 往后滚动一整屏 Ctrl d 往前滚动半屏 Ctrl u 往后滚动半屏 Ctrl e 往后滚动一行 Ctrl y 往前滚动一行 看似比较多,但是可以根据键盘的位置来进行记忆,并且下面两个也不常用 上面的滚屏都有一个共同点,就是会改变光标的位置,且屏幕也在改变 如果想让光标维持在原来的位置实现滚屏请看下面 用z调整光标 z<Enter> 将光标所在行移动到屏幕顶端 z. 将光标所在行移动到屏幕中间 z- 将光标所在行移动到屏幕低端 tips:980z<Enter>可以将第980行移动到屏幕顶端 好吧,有时候你其实不想滚屏,你只想在当前屏幕中移动 请往下看 在屏幕中移动 H 移动到屏幕顶端的行 M 移动到屏幕中央的行 L 移动到屏幕底端的行 nH 移动到屏幕顶端往下的第n行 nL 移动到屏幕顶端往上的第n行 据我猜测这三个字母应该是HIgh、Middle和Low的缩写,其实挺好记的 多练习几遍就行了,需要注意的是:这里只是光标的位置变化,和上面两种不同 tips:你可以用 -和j k实现同样的位置变化,只不过要操作多次而已 -和j k的区别忘了吗?往上看看吧 在当前行移动 ^ 移动到当前行的第一个非空格处 n| 移动到当前行的第n列 这里的^与上面的0通常情况下表示的位置是一样的 而n|,个人感觉还没有h l方便,慢慢的数出行数还不如直接按着h l 左右移 根据文本块移动 所谓的文本块也就是句子、段落、小节等 ( 移动到当前句子开头 ) 移动到下一个句子开头 { 移动到当前这一段开头 } 移动到下一段开头 [[ 移动到当前这一节的开头 ]] 移动到下一节的开头 其中,VIM以? . !等符号来标记一个句子 空白行来标记一个段落 用节宏来标记一个节(节宏是什么我还没搞清楚) 根据行号来移动 Ctrl g 显示当前行信息 nG 转至第n行 G 转至文本末尾 gg         移至文本开头 如果你不知道当前是多少行的话就可以用Ctrl g来查看 如果想转到第800行,可以用800G 其实z命令也可以做到,并且把光标移动到第一行 tips:``反引号可以返回到使用G之前的位置

fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。

tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用)

Fx:和 fx 类似,不过是往回找。使用 , 来重复上一个F命令。

Tx:和 tx 类似,不过是往回移动到 x 的右边一个位置。

b:光标往前移动一个词。

w:光标往后移动一个词。

0:移动光标到当前行首。(是数字0)

^:移动光标到当前行的第一个字母位置。

*:读取光标处的字符串,并且移动光标到它再次出现的地方。

#:和上面的类似,但是是往反方向寻找。

/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n移动到下个 text 处,N 移动到上一个 text 处 。

?text:和上面类似,但是是反方向。

m{a-z}:在当前光标的位置标记一个书签,名字为 a-z 的单个字母。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。

`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。

`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。

%:在成对的括号等符号间移动,比如成对的 [ ] , { }, ( ) 之间。将光标放到任意符号上,然后通过 % 来移动到和这个符号匹配的符号上,% 还可以正确的识别括号的嵌套层数,总是移动到真正匹配的位置上。因此这个命令在编辑程序代码的时候非常有用,可以让你方便的在一段代码的头尾间移动。

上一节我们讲到了VIM中的移动,既然已经能够在屏幕和光标间游刃有余了

从光标修改到本行末尾 C 功能同上 c0 从光标修改到本行开头 cc 删除整行从头修改 S 功能同上 s 删除光标所在位置的字符,然后插入 这里有点难记,主要是多练习才能看到效果 其中,c和C功能是一样的,都是从光标修改到行尾,d a达到相同效果 c0和d0 i效果一样,区别是少输入一次 cc和S效果也是一样,其实S是属于插入的范畴,这里类似,所以一起讲了 再来是s,它会删除光标处的字符再插入,效果等同于x i或c space 多行修改我想就不用说了,前面加上数字再组合命令就可以了 从上面看来,我们应该可以更深刻的认识到,VIM中大部分命令是组合使用的 利用好了这点才能更快的摸索出自己的使用习惯,从而高效修改 操作相同文本的时候复制尤其有效,在Windows中我们都习惯了先用鼠标选择文本 而Vim下则不用那么麻烦,你甚至可以使用可视模式操作,但这里先略过 我在这一节主要说说命令模式下的复制 在讲复制之前我要先说一个简单到不行的命令 粘帖 p 粘帖 复制的形式可以很多,但是粘帖的形式却没多少 无非就是加数字达到多次粘帖什么的 其实准确的说,p应该是放置的意思 不过我也搞不清是paste还是put的缩写 单词和字符复制 ynl 向右复制n个字符 ynh 向左复制n个字符 ynw 向前复制n个单词 ynb 向后复制n个单词 由于复制操作通常是在量比较大的情况下进行 所以这里我使用了n代替需要操作的个数 需要说明的是,这里看起来并没有多大意义 因为复杂字符和单词还没有直接插入的方式来的快 行复制 y0 复制到行首 y

现在我们知道错在哪儿了,修正一下,然后使用":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中加入如下设置:

Java代码

  1. "不同时显示多个文件的tag,只显示当前文件的
  2. let Tlist_Show_One_File=1
  3. "如果taglist窗口是最后一个窗口,则退出vim
  4. let Tlist_Exit_OnlyWindow=1

在vim中用如下命令打开taglist窗口

Java代码

  1. :Tlist

将taglist帮助文件放在~/.vim/doc目录下,如果需要使用:help taglist.txt命令查看帮助文档,需要事先在vim中执行如下命令:

Java代码

  1. :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中加入如下配置:

Java代码

  1. "设置WinManager与TagList的布局:前者在上,后者在下
  2. let g:winManagerWindowLayout='FileExplorer|TagList'
  3. "映射WinManager快捷键,在normal模式下按wm,控制开启和关闭
  4. 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中加入:

Java代码

  1. let g:miniBufExplMapCTabSwitchBufs = 1

<C-Tab>

向前循环切换到每个buffer上,并在但前窗口打开

<C-S-Tab>

向后循环切换到每个buffer上,并在但前窗口打开

如果在.vimrc中设置了下面这句:

Java代码

  1. let g:miniBufExplMapWindowNavVim=1

则可以用<C-h,j,k,l>切换到上下左右的窗口中去,就像: C-w,h j k l 向"左,下,上,右"切换窗口. 在.vimrc中设置:

Java代码

  1. 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中加入如下配置:

Java代码

  1. 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中需要如下配置:

Java代码

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

0 人点赞