Vim 是 Unix/Linux 系统最好的文本编辑器,在没有熟练之前,可能没这个感觉。下面整理相关命令,作为个速查表吧。
模式
- 命令模式(Command mode)
- 首次启动 vim,便是命令模式
输入模式时候,按ESC进入
- 输入模式(Insert mode)
- 按
i、o、a键进入 - 窗口左下角有
-- INSERT --的字样
- 按
- 底线命令模式(Last line mode):在
命令模式下按下:(英文冒号)
文件操作
vim a.txt打开或新建文件,并将光标置于第一行首vim a.txt b.txt编辑多个文件vim +n a.txt打开文件,并将光标置于第 n 行首(n 为数字)vim + a.txt打开文件,并将光标置于最后一行首vim +/pattern a.txt打开文件,并将光标置于第一个与 pattern 匹配的字符串处vim -r a.txt在上次正用 vim 编辑时发生系统崩溃,恢复文件:e <path/to/file>打开一个文件:e!放弃修改,重新载入该文件:q退出 vim:q!退出不保存,:qa!强行退出所有正在编辑的文件(即使有修改):w保存当前文件:wq,ZZ保存退出:saveas <path/to/file>,:w <path/to/file>另存为:bn和:bp当同时打开多个文件,使用这两个命令来上下切换文件:r <path/to/file>把<path/to/file>文件内容插入「光标」所在行后面:! <command>暂时离开 vim 到指令行模式下执行 command 的显示结果:r ! <command>将命令 command 的输出结果插入「光标」所在行后面
光标操作
h,j,k,l相当于键盘 ← ↓ ↑ → 移动一个字符nh,nj,nk,nl则按对应方向移动 n 个字符n回车键向下移动 n 行
H,M,L光标移至「屏幕」的顶行中间行尾行- 当前行:
0,$到行头,行尾w,e,b对应向右,右,左移动一个单词(首/尾)fa,3fa到第一,第三个为 a 的字符处,fb,fs等以此类推,F相反方向ta,3ta到第一,第三个为 a 的前字符处,tb,ts等以此类推,T相反方向10空格键向后面移动 10 个字符
- 整个内容
gg,G到内容顶部尾部10G移动到内容的第10行
- 段落
{,}移动到段落的开头结尾(,)移动到句子的开头结尾
屏幕操作
- 翻页:
ctrl+f,ctrl+d屏幕对应向下下移动一页半页 - 翻页:
ctrl+b,ctrl+u屏幕对应向上上移动一页半页 - 翻行:
ctrl+e,ctrl+y屏幕对应向上下移动一行
窗口操作
:split分割一个窗口:split a.c为另一个文件 a.c 分隔窗口:n split a.c为另一个文件 a.c 分隔窗口,光标移至 n 行ctrl+w窗口切换:close关闭当前窗口
文本操作
插入
i,I对应在光标前, 当前行首插入a,A对应在光标后, 当前行尾插入o,O对应在当前行之下,上新开一行插入r替换当前字符R替换当前字符及其后的字符,直至按 ESC 键
删除
- 字符
s删除光标所在字符,然后进入输入模式S,cc删除光标所在行,然后进入输入模式x,X对应向后,前删除一个字符10cw删除 10 个字符,然后进入输入模式dnh,dnl向左,右删除 n 个字符
- 单词
dw删除一个单词(删除光标位置到下一个单词开始的位置)dnw删除 n 个单词
- 行
nC删除当前行及其后 n-1 行,然后进入输入模式dd删除一行d$,do删至行尾,行首(nndd删除 n 行(从当前行算起):n1, n2 d删除 n1 行到 n2 行之间的内容dnj,dnk向下,上删除 n 行J删除行尾的换行符
搜索
/word,?word当前行向下,上寻找一个名称为 word 的字符串n,N向下,上重复前一个搜寻的动作:n1,n2 s/word1/word2/gn1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2:%s/word1/word2/g全文寻找 word1 字符串,并将该字符串取代为 word2:%s/word1/word2/gc全文寻找 word1 字符串,并将该字符串取代为 word2,取代前需确认提示
复制/粘贴
yy复制当前行nyy复制当前行向下 n 行(20yy:复制 20 行)y1G复制当前行到首行的所有数据yG复制当前行到尾行的所有数据y0复制光标所在的那个字符到该行行首的所有数据y$复制光标所在的那个字符到该行行尾的所有数据p,P粘贴至当前行的下一行,上一行np粘贴文本 n 次:n1,n2 co n3n1~n2行的内容拷贝到第 n3 行下:n1,n2 m n3n1~n2行的内容移至到第 n3 行下
撤销/重做
u复原前一个动作ctrl+r重做上一个动作.重复前一个动作
自动提示
ctrl+n或ctrl+p,在 insert 模式下- 未输入,则有提示菜单
- 输入一个词的开头,则可自动补齐功能
Visual 模式
v进入-- VISUAL --模式V进入-- VISUAL LINE --模式- 块操作(批量插入字符)
ctrl + v进入块选择模式- 移动光标选中需要操作的行
- 大写的
I进入「行首」插入模式输入 (如果批量删除,可以按d) - 输入完,按两下
ESC
行方式命令
即底线命令模式,列一些常用命令:
:n1,n2 co n3n1~n2行的内容拷贝到第 n3 行下:n1,n2 m n3n1~n2行的内容移至到第 n3 行下:n1,n2 d删除 n1 行到 n2 行之间的内容:n1,n2 w!command将文件中 n1 行至 n2 行的内容作为command的输入并执行之:n1,n2/^/注释符/gn1~n2 行加注释符, 例如::10,20s#^#//#g在 10~20 行添加 // 注释:n1,n2/^注释符//gn1~n2 取消注释符, 例如::10,20s#^//##g在 10~20 行取消 // 注释
宏
q[a-z]把操作记录在寄存器 [a-z](命名),q停止录制@[a-z]在当前光标处执行宏[a-z]@@在当前光标处执行最新录制的宏reg显示当前定义的所有的宏
例子:
vim a.txt新建 a.txt, 写入 1qa开始录制Yp复制行ctrl+a增加 1q停止录制@a1 下面写下 2@@2 下面写下 310@@创建新的 10 行,并把数据增加到 13.
配置
配置文件在 /usr/share/vim/vimrc,这是系统级的 vimrc 配置文件,为了保证 vim 的正常运行,一般并不会修改这个文件,而是应该在自己的用户目录下(~ 下)创建一个新的用户级 vimrc 文件
$ vim ~/.vimrc
# ------- .vimrc 内容(# 注释不要放) -------
# 设置行号
set number
# 语法高亮
syntax on
# 缩进
filetype plugin indent on
底线命令模式
:set ruler,set noruler显示/不显示标尺:set hlsearch高亮显示查找到的单词:set nohlsearch关闭高亮显示:syntax on语法高亮:set nu显示行号:set nonu不显示行号:set ignorecase搜索时忽略大小写:set smartcase搜索时匹配大小写:set ruler显示光标位置坐标:set hlsearch搜索匹配全高亮:set tabstop=8设置tab大小,8为最常用最普遍的设置:set softtabstop=84:4个空格,8:正常的制表符,12:一个制表符4个空格,16:两个制表符:set autoindent自动缩进:set cindentC语言格式里面的自动缩进