1. 初次进入VIM
- 不知道处于什么模式,万能命令:,一键回到normal模式,下面的命令没有特殊说明一律是normal模式。
- 移动光标:h(左)j(下)k(上)l(右)
- 进入输入模式:i
- 删除命令: x 删除单个字符,dd(删除一行),J(删除空余行(就是删除回车))
- 撤销和重做:u撤销最近一次操作,Ctrl+R重做最近撤销的操作
- 其他编辑命令:
(1)i命令是在光标前插入字符
(2)a命令则是在光标后插入字符
(3)o命令在光标下一行插入一个新行并进入insert模式
(4)O命令在光标上一行插入一个新行并进入insert模式。 - 在命令前使用数字表示重做命令,示例:a!!!(在光标后插入三个!),等效为3a!,kkkk(向上移动四行),等效为4k。
- 退出命令:ZZ命令保存更改并且退出,:q!强制退出且不保存更改。
移动光标
- 按单词移动:w移动到下一个单词头,b移动到上一个单词头,e移动到下一个单词尾,ge移动到上一个单词尾
- 移动到行首或者行尾:$移动到行尾,0(zero)移动到行首
- 移动到一个字符:fx在本行内查找字符x并移动光标到字符x处,Fx同fx只不过是向左查找, Tx、tx同Fx、fx,只不过光标停在字符x后一个,前一个字符
- 匹配括号:如果光标在(上,%会将光标移动到)处
- 移动到指定行:numG移动光标到num行,G移动到最后一行,gg移动到第一行,50%移动到文件一半的地方,H移动到文件首,M移动到文件中部,L移动到文件尾部
- 当前所在的位置:使用Ctrl+G命令,你可以得到光标当前位置的信息,使用number选项,可以在左侧显示行号,:set number, :set nonumber关闭行号显示,ruler选项让VIM在右下角显示光标的位置
- 滚动屏幕:使用Ctrl+D向下移动半个屏幕,使用Ctrl+U向上移动半个屏幕,使用Ctrl+E向上滚动一行,使用Ctrl+Y向下滚动一行,Ctrl+F向前滚动一个屏幕,Ctrl+B向后滚动一个屏幕
- 简单的搜索功能:/string搜索string字符串 /?string向前搜索字符串,同时我们可以设置忽略大小写,:set ignorecase,支持正则表达式的一些语法,同时我们可以设置高亮匹配项(hlsearch)
- 使用标记:我们使用G命令移动到文件尾,使用“回到原处,使用mark做标记
做小的修改
- 操作和移动:d4w删除4个单词,d2e,d$
- 更改文本:c2wbe:c更改命令,2w移除两个单词,be插入be字符串
- 重复更改:.命令用来重复上一个命令,f<查找第一个<,df>删除<到>的字符,f<, .重复df>
- 可视模式:v字符选中,V行选中,Ctrl+V块选中
- 移动文本:思路同windows的,剪切粘贴,使用d,移动光标,p粘贴
- 复制文本:y复制命令,yy复制整行文本,y$复制到行尾的内容
- 使用剪贴板:”*yy复制一行到剪贴板,”*p复制剪贴板的内容到vim
- 文本对象: 如果光标在一个单词中间,而你想删除整个单词,你可以使用daw,d是删除命令,aw是文本对象
- 替换模式:使用R命令进入替换模式,在这个模式中,输入的字符将会替换光标所在处的字符
使用语法高亮
- 开启语法高亮:syntax enable
仅在VIM支持颜色的时候开启:
if &t_Co > 1
syntax enable
endif - 不同的颜色:使用:colorscheme命令指定颜色主题
编辑颜色方案文件:term 黑白终端 cterm 彩色终端
ctermbg 彩色终端背景色 ctermfg 彩色终端前景色
gui GUI guibg GUI背景 guifg GUI前景
编辑多个文件
- 编辑另一个文件::edit foo.txt 如果当前文件有未保存的修改,VIM为提示错误信息,当然你可以使用!来强制执行,修改将会丢失
- 打开几个文件:vim one.c two.c three.c :next打开下一个文件, :wnext打开更改并打开下一个文件,:args显示当前所在的文件名,:previos, :wprevios, :last, :first :2next,没有:wfirst,:last
- 从一个文件跳转到另一个文件:Ctrl+^跳转到刚才的文件
- 使用REGESTERS:”[a-z]使用a-z的一个字母来指定REGESTERS的名字,”fyas复制一条句子到f寄存器,”l3yy复制3行到l寄存器,Ctrl-Vjjww”by复制一个块到b寄存器, “fp粘贴f寄存器的内容, “wdaw删除一个单词并写到w寄存器中
- 追加一个文件::write >> logfile
- 使用只读文件打开文件:vim -R filename
- 禁止修改一个文件:vim -M filename
- 改变文件名::edit a.c :saveas b.c
分割窗口
- 分割窗口::split Ctrl+W w 在窗口间跳转
- 分割窗口并打开一个文件 :split filename
- 窗口大小: :3split alpha.c 指定窗口的高度 Ctrl+W + 增大窗口,Ctrl+W - 减小窗口
- 垂直分割: :vsplit Ctrl+W h j k l 切换到左,下,上,右的窗口,Ctrl+W t,b切换到顶部或底部的窗口
- 对于所有窗口的命令::qall, :wall, :wqall, :qall!
- 使用vimdiff查看差异:vimdiff main.c main.c~
大的修改
- 替换:substitute只替换每行第一次出现查找字符串的地方,如果要全部替换需要家/g
- 命令生效的范围:与sed使用类似,兼容正则表达式的模式匹配
一些技巧
- Doe, John 到 John Doe
:s/([^,]), (.)/\2 \1/ - OBJS = \
version.o \
pch.o \
getopt.o \
util.o \
getopt1.o \
inp.o \
patch.o \
backup.o
排序上面的内容
/^OBJS
j
:.,/^$/-1!sort - 倒转行序::g/^/m 0
- 单词计数: gCtrl+G
- 删除多余的空行:: s/\s\+ //
- 6.