vim命令

文本信息配置

set nu(写入配置文件.vimrc中) 显示行号。

ctrl-g(正常模式下使用命令) 显示文件信息和当前行。

statusline.vim(插件) 增加底部状态栏。


代码缩进配置

filetype on(写入配置文件.vimrc中) 使vim对文件类型敏感。

autocmd FileType c,cpp,h :setlocal cindent cinoptions=:0,g0,t0(写入配置文件.vimrc中) 设置c缩进风格,具体详情参见:h cinoptions-values。

autocmd FileType c,cpp,h :setlocal et sta sw=4 sts=4 tabstop=4(写入配置文件.vimrc中) 设置一次缩进的距离是4个空格。

=(正常模式或者可视模式下使用命令) 按照缩进风格排版代码。

<(可视模式下使用命令) 向左缩进一级。

>(可视模式下使用命令) 向右缩进一级。


语法高亮

filetype plugin on(写入配置文件.vimrc中) 通常安装的vim中已经加入了各种语言的语法高亮插件,我们只需要打开文件类型相关的插件就可以了。


快速定位

gd(正常模式下使用命令) 跳转到局部变量定义处。

gD(正常模式下使用命令) 跳转到全局标量定义处。

*(正常模式下使用命令) 搜索并跳到下一个光标所在的单词。

g(正常模式下使用命令) 功能接近,但是查找的目标不带<和>单词分界符号。

#(正常模式下使用命令) 搜索并跳到上一个光标所在的单词。

g#(正常模式下使用命令) 功能接近#,但是查找的目标不带<和>单词分界符号。


标记位置

m{a-zA-Z0-9} (正常模式下使用命令) 在当前位置制作一个标记,标记名字可以使用a-z或者A-Z之间的任意字符,例如输入ma,就是将当前位置标记为a标记。注意a-z为单文件标记,不可跨文件使用,而A-Z0-9为全局标记,可以跨文件使用。

‘{a-zA-Z0-9} (正常模式下使用命令) 跳转到本文件的标记上。

:marks [{a-zA-z0-9}] (正常模式下使用命令) 查看指定标记的内容,不写标记号则查看所有。

:delm {a-zA-z0-9} (正常模式下使用命令) 删除一个标记。


全文搜索

:vimgrep(正常模式下使用命令) 全文搜索,功能同grep命令,但是支持在vim进行多文件跳转定位。

使用方法:vimgrep 正则表达式 文件。文件支持通配符,例如*.c代表所有的.c文件。如果希望递归搜索,可以使用**/*,表示搜索所有的文件。

:cl 列举结果

:cc(正常模式下使用命令) 当前结果

:cn(正常模式下使用命令) 下一个结果

:cp(正常模式下使用命令) 上一个结果

:cw(正常模式下使用命令) 重新打开搜索结果窗口


多文件编辑

vim f1 f2 …… fn(在shell下使用命令) 打开多个文件。

:e 文件名(正常模式下使用命令) 在vim中打开新文件。

:ls(正常模式下使用命令) 所有打开文件列表。

:bn(正常模式下使用命令) 到下一个文件。

:bp(正常模式下使用命令) 到上一个文件。

:b# 或 ctrl-6(正常模式下使用命令) 到最近的前一个文件。

set autowriteall(写入配置文件.vimrc中) 如果讨厌每次打开新文件,vim喋喋不休的要求你保存,那么可以设置自动保存。


多窗口编辑

:sp 文件名(正常模式下使用命令) 横向拆分窗口(多行窗口)。

:vsp 文件名(正常模式下使用命令) 纵向拆分窗口(多列窗口)。

ctrl-w h(正常模式下使用命令) 将光标移动到左一个窗口。

ctrl-w j(正常模式下使用命令) 将光标移动到下一个窗口。

ctrl-w k(正常模式下使用命令) 将光标移动到上一个窗口。

ctrl-w l(正常模式下使用命令) 将光标移动到右一个窗口。

ctrl-w +(正常模式下使用命令) 当前窗口尺寸变大。

ctrl-w -(正常模式下使用命令) 当前窗口尺寸变小。

ctrl-w o(正常模式下使用命令) 只显示当前窗口。


函数列表

taglist.vim(插件) 列表插件。

let Tlist_Use_Right_Window = 1(写入配置文件.vimrc中) 如果希望列表在右侧显示,则加入这个配置,默认是左侧。

:Tlist(正常模式下使用命令) 显示函数列表。

d(在taglist窗口下使用) 从列表中删除文件。

+(在taglist窗口下使用) 展开文件。

-(在taglist窗口下使用) 折叠文件。

=(在taglist窗口下使用) 折叠所有文件。

x(在taglist窗口下使用) 显示或隐藏正常窗口。


文件列表

NERD_tree.vim(插件) 横向拆分窗口(多行窗口)。

let NERDTreeWinPos = ‘right’(写入配置文件.vimrc中) 如果希望文件树在右侧显示,则加入这个配置,默认是左侧。

:NERDTree(正常模式下使用命令) 显示文件列表。


函数跳转

ctags(软件,需要另外安装) 生成多种语言tag文件的软件。

Ctags –R *.c(在shell下使用命令) 生成当前路径所有.c文件的tag,-R代表递归。

:ta 标记 或 [g] ctrl-] 列举标签(多个标签)或者跳转到标签(单个标签)。

ctrl-t 返回上一级。

:tags 列出标签栈。


语法错误

:make(正常模式下使用命令) 执行外部make命令,并且显示所有的编译警告和错误,并且可以在vim中定位。

:cl 列举结果

:cc(正常模式下使用命令) 当前结果

:cn(正常模式下使用命令) 下一个结果

:cp(正常模式下使用命令) 上一个结果

:cw(正常模式下使用命令) 重新打开搜索结果窗口


二进制文件查看 (鉴于有同学理解出现分歧 将二进制查看更新为二进制文件查看)

:范围!xxd(正常模式下使用命令) 把指定范围的部分转化为二进制文件阅读方式。

:范围!xxd -r(正常模式下使用命令) 把指定范围的部分转回字符阅读方式。


字符集的编码

let &termencoding=&encoding

set fileencodings=utf-8,gbk,cp936(写入配置文件.vimrc中)

加入多种字符编码支持。

:set fileencoding(正常模式下使用命令) 设定文件字符编码。


补充

ctrl-p(插入模式下使用命令) 跳出补全菜单。

ctrl-n(在跳出补全菜单后) 下一个结果。

ctrl-p(在跳出补全菜单后) 上一个结果。

ctrl-y(在跳出补全菜单后) 选择当前结果。

ctrl-x ctrl-f(插入模式下使用命令) 文件名补全。

ctrl-x ctrl-i(插入模式下使用命令) 包含的头文件。

ctrl-x ctrl-](插入模式下使用命令) ctags(将在下文中介绍)符号补全。

ctrl-x ctrl-o(插入模式下使用命令) omni补全,需要设置omnifunc变量。


vim其他命令 (参考vi(vim)教程)

打开文件、保存、关闭文件:

vi filename //打开filename文件

:w    //保存文件

:w vpser.net //保存至vpser.net文件

:q    //退出编辑器,如果文件已修改请使用下面的命令

:q!    //退出编辑器,且不保存

:wq //退出编辑器,且保存文件

插入文本或行:

a //在当前光标位置的右边添加文本

i //在当前光标位置的左边添加文本

A //在当前行的末尾位置添加文本

I //在当前行的开始处添加文本(非空字符的行首)

O //在当前行的上面新建一行

o //在当前行的下面新建一行

R //替换(覆盖)当前光标位置及后面的若干文本

J //合并光标所在行及下一行为一行(依然在命令模式)

移动光标:

使用上下左右方向键

命令模式下:h 向左、j 向下 、k 向上、l 向右。

空格键 向右、Backspace 向左、Enter 移动到下一行首、- 移动到上一行首。

删除:

x //删除当前字符

nx //删除从光标开始的n个字符

dd //删除当前行

ndd //向下删除当前行在内的n行

u //撤销上一步操作

U //撤销对当前行的所有操作

搜索:

/vpser //向光标下搜索vpser字符串

?vpser //向光标上搜索vpser字符串

n //向下搜索前一个搜素动作

N //向上搜索前一个搜索动作

跳转:

n+ //向下跳n行

n- //向上跳n行

nG //跳到行号为n的行

G //跳至文件的底部

设置行号:

:set nu //显示行号

:set nonu //取消显示行号

复制:

yy //将当前行复制到缓存区,也可以用 “ayy 复制,”a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。

nyy //将当前行向下n行复制到缓冲区,也可以用 “anyy 复制,”a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。

yw //复制从光标开始到词尾的字符。

nyw //复制从光标开始的n个单词。

y^ //复制从光标到行首的内容。

y$ //复制从光标到行尾的内容。

p //粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用”ap 进行粘贴。

P //粘贴剪切板里的内容在光标前,如果使用了前面的自定义缓冲区,建议使用”aP 进行粘贴。

替换:

:s/old/new //用new替换行中首次出现的old

:s/old/new/g //用new替换行中所有的old

:n,m s/old/new/g //用new替换从n到m行里所有的old

:%s/old/new/g //用new替换当前文件里所有的old

编辑其他资源:

:e otherfilename //编辑文件名为otherfilename的文件。

修改文件格式:

:set fileformat=unix //将文件修改为unix格式,如win下面的文本文件在linux下会出现^M。

Author: iMine
Link: https://imine141.github.io/2021/08/12/%E8%AE%A1%E7%AE%97%E6%9C%BA/Vim%E5%91%BD%E4%BB%A4/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.