VIM编辑器
通过vim命令打开文件,默认进入的就是正常模式
VIM正常模式
普通编辑命令
x #删除光标所在字符(=d+h)
X #删除光标前一个字符(=d+l)
D #删除当前行光标位置到行尾的字符(=d+$)
dd #删除光标所在的行
J #删除光标所在行的换行符 (将原先光标下一行的内容,变成当前行内容)
p #在光标后粘贴
P #在光标前粘贴
xp #交换两个连续字符的位置(通过x删除光标所在字符,通过p在光标后粘贴之前x删除的内容实现连续字符的位置交换)
ddp #交换两行的位置(通过dd删除光标所在字符,通过p在光标后粘贴之前dd删除的内容实现连续两行的位置交换)
u #撤销前一个操作
ctrl+r #恢复前一个操作(撤销之后不想撤销了可通过此命令恢复)
可以配合数字n进行n次批量操作;如3x,则删除当前光标及其后面两个字符;如3dd,则删除当前光标及其后面两行字符
说明:x和dd作为删除命令执行后,删除的内容保存在缓冲区。粘贴命令调用缓冲区内最新的内容(与剪切类似)
控制命令
字符级命令
h或者键盘向左键 #光标左移一个字符
l或者键盘向右键 #光标右移一个字符
j或者键盘向下键 #光标向下移一行
k或者键盘向上键 #光标向上移动一行
可以配合数字n进行n次批量操作
单词级命令
w #下一个单词的词首
W #空白字符分割的下词词首
b #上一个单词的词首
B #空白字符分割的上词词首
e #下个单词的词末
E #空白字符分割的下词词末
ge #上一个单词的词末
GE #空白字符分割的上词词末
光标在单词内时,b/e命令的结果是移动到本单词的词首/词末
命令前+数字n,执行n次命令
行级命令
$ #当前行行尾
0 #当前行的第一个字符
^ #当前行的第一个非空字符
移动到指定字符
f+单个字符 #在本行内向右移动到指定字符
F+单个字符 #在本行内向左移动到指定字符
t+单个字符 #在本行内向右移动到指定字符的前一个字符
T+单个字符 #在本行内向左移动到指定字符的前一个字符
在命令前加数字n来定义移动到行内第几个指定字符
% #在“()”“【】”“{}”类符号的首尾间切换
1G或gg #文本第一行行首
nG #移动到第n行行首
n% #按百分比近似定位到某行
G #文本末行行首
屏幕级命令
H #屏幕顶部行首
M #屏幕中央行首
L #屏幕底部行首
zt #使光标所在位置移动到屏幕的顶部(所有内容做移位)
zz #使光标所在位置移动到屏幕的中央(所有内容做移位)
zb #使光标所在位置移动到屏幕的底部(所有内容做移位)
ctrl+b #上移一屏
ctrl+f #下移一屏
ctrl+u #上移半屏
ctrl+d #下移半屏
ctrl+e #上滚一行
ctrl+y #下滚一行
操作符
d操作符
作用:把选择的内容存入寄存器(相当于删除)
dd #删除当前行
ndd #自当前行起删除连续的n行
c操作符
change把选择的内容存入寄存器,并进入编辑模式
y操作符
作用:把选中的内容复制到寄存器中
yw #拷贝一个单词
ynw #拷贝n个单词
ye #拷贝一个单词(不包括单词结尾空格)
yne #拷贝n个单词
yy #拷贝一行
nyy #拷贝n行
y$ #拷贝从当前位置到行尾
yG #拷贝从当前位置到文尾
所有的操作符(包括d操作符)存入寄存器的内容都适用于p/P粘贴命令。
VIMinsert模式
在正常模式下如果以下字母可以进入到insert模式,然后就可以对文件进行编辑了。
i #在光标前插入字符,进入insert模式
I #在行首插入字符,进入insert模式
a #在光标后插入字符,进入insert模式
A #在行尾插入字符,进入insert模式
o #在光标下方插入空行,进入insert模式
O #在光标上方插入空行,进入insert模式
s #删除光标位置字符,并进入insert模式
S #删除光标所在行,并进入insert模式
c #删除光标所在行的字符,并进入insert模式
C #删除光标所在位置到行尾的字符,并进入insert模式
VIM命令行模式
查找命令
/+字符或字符串 #查找字符或字符串,如果有多个可以通过n和N进行上下跳转
设置命令“:”
保存退出
:+w #保存文本,不退出vim
:+wq #保存并退出vim(不管是否有修改,文件修改时间都会更新)
:+x #若有修改,则保存并退出vim;若无修改,则直接退出vim
:+X #设置密码
:+q #未对文件进行修改时,直接退出vim
:+q! #强制对出vim(放弃修改)
:+e! #放弃修改并重新打开该文本
环境设定
:+set nu #显示行号
:+set nonu #隐藏行号
:+set ruler #显示光标位置信息
:+set noruler #隐藏光标位置信息
:+set hlsearch #高亮匹配
:+set nohlsearch #取消高亮匹配
:+nohlsearch #临时取消高亮(只取消一次查询的高亮)
:+set ic #忽略大小写
:+set noic #区分大小写当前命令,忽略大小写则+\c
#如使用查找命令,/test\c表示查找test并忽略大小写
:+set incsearch #在输入字符串过程中显示匹配点
:+set nowrapscan #找到文尾后停止查找
:+set wrapscan #恢复为到文尾后自动从头开始
:+set paste #复制的时候保留原格式
环境设置仅当前有效,退出之后就无效了,如果希望可以永久生效可以去修改vim的配置文件/etc/vimrc
替换(查找然后替换)
:s@old@new@ #光标所在行的第一个old替换为new(old和new可以是字符也可以是字符串,符号@可以替换为别的任意特殊符号)
:x,ys@old@new@g #x行到y行的所有old替换为new
注意:参数g表示全局,不加g则只替换每行的第一个old
参数x替换为“.”,则从当前行开始
参数y替换为“$”,则到最后一行为止
:%s@old@new@gc #全局替换,替换文本中所有old为new 注意:参数c,即为每次替换均需要确认
VIM可视模式
v #字符可视模式。可进行字符的逐个选择
V #行可视模式。按行选择,参照字符选择
ctrl+v #块可视模式。选择屏幕的一个矩形区域,以进入可视模式时的光标位置为一角,以光标当前位置为对角
o #把光标移动到矩形的对角
O #把光标移动到水平位置的另一角
常用方式
d:删除选择区域
进入insert模式(I(shift+i)):在选择区域前面插入相同内容