vim常用指令大全

vim模式及命令

vim的四种模式

  • 正常模式(normal-mode):不能对文本直接编辑,可使用快捷键进行增删改查(打开后的默认模式)
  • 插入模式(insert-mode):可直接对文本进行编辑(普通模式下输入i进入输入模式)
  • 命令模式(command-mode):在末行输入命令进行操作
  • 可视模式(visual-mode)
    对于初学者,安装后建议运行vimtutor进入官方文档,如果是不是中文可运行vimtuor zh,先根据文档进行练习

vim四种模式的切换

  • 普通模式
    在任何模式下,只要按下 Esc 键就可以返回普通模式。

  • 普通模式进入插入模式(插入模式则类似于记事本)

i # 在光标所在字符前开始输入文字并进入插入模式
a # 在光标所在字符后开始输入文字并进入插入模式
o # 在光标所在行的下面单独开一新行来输入文字并进入插入模式
s # 删除光标所在的字符并进入插入模式
I # 在行首开始输入文字并进入插入模式
A # 在行尾开始输入文字并进入插入模式
O # 在光标所在行的上面单独开一新行来输入文字并进入插入模式。
S # 删除光标所在行并进入插入模式
c[n]w # 改写光标后1(n)个词。
c[n]l # 改写光标后n个字母。
c[n]h # 改写光标前n个字母。
[n]cc # 修改当前[n]行。
[n]s  # 以输入的文本替代光标之后1(n)个字符,相当于c[n]l。
[n]S  # 删除指定数目的行,并以所输入文本代替之。
  • 进入可视模式(可视模式相当于高亮选取文本后的普通模式)
    • 普通模式 按键 v 进入Vim字符选择可视化模式
    • 普通模式Ctrl + v进入块选择模式
vis # 选中一个句子
vib # 选中一个block
viw # 选中一个单词
vip # 选中一个段落
va{ # 选中{}中间内容,包括{}
vi( # 选中()中间内容
vi{ # 选中{}中间的内容,不包括{}
vi< # 选中<>中间内容
vi[ # 选中[]中间内容
vi” # 选中”"中间内容
vi’ # 选中”中间的内容
  • 命令模式
    • 正常模式输入:进入命令模式
:q  # 离开vim
:q! # 退出不保存
:wq # 保存后退出
:w  # 保存编辑的内容
:w! # 强制写入该文件

操作文件

vim filename  # 用vim打开指定文件夹
vim -r filename  # 恢复上次异常退出的文件
vim -R filename  # 以只读的方式打开文件,但可以强制保存
vim -M file      # 以只读的方式打开文件,不可以强制保存

移动

  • 可配合number使用,3j (下移三行),3w(后移三个单词)
h或退格   # 左移一个字符;
l或空格   # 右移一个字符;
j        # 下移一行;
k: 		 # 上移一行;
- 		 # 把光标移至上一行第一个非空白字符。
w/W  	 # 移动到下一个word/WORD的开头(WORD表示不包含单词相邻的标点)
e/E      # 移动到下一个word/WORD的结尾		
b/B      # 回到上一个word/WORD的开头
ge/gE    # 回到上一个word/WORD的开头
(		 # 前移1句。
) 		 # 后移1句。
{ 		 # 前移1段。
} 		 # 后移1段。
fc       # 把光标移到同一行的下一个c字符处
Fc       # 把光标移到同一行的上一个c字符处
tc       # 把光标移到同一行的下一个c字符前
Tc       # 把光标移到同一行的上一个c字符后
  • 不可配合number使用
0 # 移动当前行开头
^ # 移动到当前行第一个非空白字符
$ # 移动到当前行行尾
g # 移动光标所在屏幕行行尾
gg/G # 移动到文件开头/结尾: 把光标移到递n列上。
nG   #到文件第n行
:[n]<cr> # 移动到第n行<cr>为回车
:$<cr> # 移动到最后一行。
H # 把光标移到屏幕最顶端一行
M # 把光标移到屏幕中间一行
L # 把光标移到屏幕最底端一行
gi # 快速回到上次编辑的地方
zz   # 将当前行移动到屏幕中央
zt   #将当前行移动到屏幕顶端
zb   # 将当前行移动到屏幕底端
m{a-z}  # 标记光标所在位置,局部标记,只用于当前文件
m{A-Z}  # 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。
`{a-z}  # 移动到标记位置。{a-z}: # 移动到标记行的行首。
:marks  # 显示所有标记。
:delmarks a b # 删除标记a和b。
:delmarks a-c # 删除标记a、b和c。
:delmarks a c-f # 删除标记a、c、d、e、f。
:delmarks! # 删除当前缓冲区的所有标记。

复制粘贴

yy/Y   # 复制当前行
p    # 粘贴
3yy  # 复制当前行向下的3行
dd   # 删除
3dd  # 删除当前行向下的5行
y    # 复制在可视模式下选中的文本。
[n]x #  剪切光标右边n个字符,相当于d[n]l。
[n]X # 剪切光标左边n个字符,相当于d[n]h。
y[n]w  # 复制n个词。
y[n]l  # 复制光标右边n个字符。
y[n]h  # 复制光标左边1(n)个字符。
d[n]w  # 删除(剪切)1(n)个单词
d[n]l  # 删除(剪切)光标右边n个字符。
d[n]h  # 删除(剪切)光标左边n个字符。
d0     # 删除(剪切)当前位置到行首的内容
[n] dd # 删除(剪切)n行。
:m,nd<cr> # 剪切m行到n行的内容。
dgg    # 剪切光标以上的所有行。
dG:    # 剪切光标以下的所有行。
daw和das # 剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。
p: 在光标之后粘贴。
P: 在光标之前粘贴。

查找替换

/string # 在后面的文本中查找string
?string # 在前面的文本中查找string
n # 向后查找下一个
N # 向前查找下一个
:s/old/new  # 用new替换当前行第一个old
:s/old/new/g # 用new替换当前行所有的old
:n1,n2s/old/new/g # 用new替换文件n1行到n2行所有的old
:%s/old/new/g # 用new替换文件中所有的old。
:%s/^/xxx/g  # 在每一行的行首插入xxx,^表示行首
:%s//xxx/g   # 在每一行的行尾插入xxx,表示行尾
r # 替换光标处的字符,同样支持汉字。
R # 进入替换模式(依次向后替换),按esc回到正常模式。
  • 参数说明
    • g 全局变量
    • c每个替换都将需要用户确认(%s/old/new/gc)
    • i则忽略大小写(ignore)

分屏浏览

vim -o file1 file2 # 水平分割窗口,同时打开file1和file2
vim -O file1 file2 # 垂直分割窗口,同时打开file1和file2
:sp filename # 水平分割窗口打开文件夹
:vs filename # 垂直分割窗口打开文件夹
:nsp filename # 水平分割出一个n行高的窗口
:nvs filename# 垂直分割出一个n行高的窗口
:qa  # 关闭所有窗口,退出vim。
:wa  # 保存所有修改过的窗口
ctrl+w # 切换到下一个窗口。或者是ctrl+w w
ctrl+w p #  切换到前一个窗口
ctrl+w t(b) # 切换到最上(下)面的窗口。
ctrl+w H(L,K,J) # 将当前窗口移动到最左(右、上、下)面
ctrl+w T  # 将当前的窗口移动到新的标签页上。
ctrl+w + # 当前窗口增高一行。也可以用n增高n行。
ctrl+w - # 当前窗口减小一行。也可以用n减小n行。
ctrl+w _  # 当前窗口扩展到尽可能的大。也可以用n设定行数。
:resize n  # 当前窗口n行高。
ctrl+w =   #  所有窗口同样高度。
n ctrl+w _ # 当前窗口的高度设定为n行。
ctrl+w <  # 当前窗口减少一列。也可以用n减少n列。
ctrl+w >  # 当前窗口增宽一列。也可以用n增宽n列。
ctrl+w |  # –当前窗口尽可能的宽。也可以用n设定列数。

撤销

u # 撤销一次
U # 取消当前行中所有的改动。
[n]u: # 取消n个改动。
:undo 5 # 撤销5个改变。
:undolist # 你的撤销历史。
:earlier 1m # 回到1分钟前
:later 10s # 前进10秒

.  #重复上一个编辑动作
qa:# 开始录制宏a(键盘操作记录)
q: # 停止录制
@a:# 播放宏a

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...