Vim 使用说明

JeremyJone ... 2023-7-13 大约 8 分钟

# Vim 使用说明

# 打开文件

vim filename 打开文件

vim -R filename 只读打开文件

vim -M filename 强制避免对文件进行修改打开文件

vim filename1 filename2 filename3 同时打开多个文件,但是只显示第一个文件内容

:next | :n 编辑下一个文件

:wnext | :wn 保存当前文件内容并且继续编辑下一个文件

Ctrl+^ 在两个文件之间切换

vim -o filename1 filename2 为每一个文件打开一个窗口

:args filename4 filename5 filename6 在不关闭vim的同时,重新定义文件列表

# 保存和退出

:w 保存

:q | :quit 退出

ZZ | :wq | :x 保存退出

ZQ | :q! 不保存直接退出

:edit filename | :e filename 编辑另一个文件

:e! 放弃当前文件所有修改并重新载入原始内容

:qall 放弃所有窗口的修改并退出

:wall 保存所有窗口的修改

:wqall 保存所有修改并退出

:w filename | :sav filename | :saveas filename 另存为

:f filename | :file filename 将修改的版本另存为新文件,同时不保存源文件的修改

:set autowrite 设置自动存盘

该命令在每个:next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、Ctrl+]、Ctrl+^命令时执行。

# Visual模式

v 进入Visual模式,从光标当前位置开始,移动所经过的内容都会被选中,直到下一次v结束

V 进入Visual模式,从光标当前行首开始,移动所经过的行都会被选中,直到下一次V结束

Ctrl+v 从光标当前位置开始,选中光标起点和终点所构成的矩形区域,再按Ctrl+v结束

ggVG 快速全选,gg:转到行首,V:选择整行,G:转到尾行

# 显示设置

:args 显示当前文件

:set number | :set nu! 显示行号

:set nonumber | :set nonu! 不显示行号

:set ruler 在Vim窗口右下角显示当前光标位置

:set autoindent 自动缩进

:set hlsearch 查询结果高亮

:set nohlsearch 取消查询结果高亮

:split | :vsplit 分割窗口

Ctrl+w 切换当前活动窗口

Ctrl+w h 切换到左边窗口

Ctrl+w j 切换到下边窗口

Ctrl+w k 切换到上边窗口

Ctrl+w i 切换到右边窗口

Ctrl+w t 切换到顶部窗口

Ctrl+w b 切换到底部窗口

:close 关闭活动窗口,阻止关闭最后一个活动窗口

:only 关闭除当前活动窗口之外的所有窗口,修改过的窗口不会关闭

:set warp 自动换行

:set ignorecase 忽略大小写

== 对当前行自动格式化

数字== 对当前行起的下面"数字"行进行格式化

gg=G 对整个文档进行格式化

# 编辑

# 增加

i 在光标之前插入

支持数字:3i!,在光标之前插入三个"!"

I 在当前行首插入

支持数字:3I@,在行首插入三个"@"

a 在光标之后插入

支持数字:3a!,在光标之后插入三个"!"

A 在当前行尾插入

支持数字:3A@,在行尾插入三个"@"

o 在当前光标行之下插入空行

O 在当前光标行之上插入空行

# 删除

d+位移命令 删除从光标位置到位移处的内容

支持数字:    d+2+方向键,剪切左右方向的两个字符,剪切上下方向2行+当前行(共三行)的内容

- 3dw  |  d3w     删除当前光标后面的3个单词
- 3d2w     删除2光标后面两个单词,执行3次,共删除6个单词

- 左:    剪切前一个字符
- 右:    剪切后一个字符
- 上:    剪切当前行和上一行
- 下:    剪切当前行和下一行
- Shift+左:    剪切至当前单词首字符
- Shift+右:    剪切至下一个单词首字符
- dw     删除从当前位置到下一个单词词首
- db     删除从当前位置到前一个单词词首
- diw     删除光标所在的单词,不包括空白字符
- daw     删除当前光标所在单词,包括之后的空白字符
- dG     删除当前行至文件末尾的内容
- dgg     删除当前行至文件行首的内容

dd 删除当前光标整行,并将之后内容上移一行

D | d$ 删除到行尾

c+位移命令 删除从光标处到位移处的内容,并进入编辑模式。具体参照 "d+位移命令"

C | c$ 删除光标处至行尾,并进入编辑模式

x | dl 删除当前光标右边的一个字符

支持数字:3x,删除光标右边三个字符

X | dh 删除当前光标左边的一个字符

支持数字:3X,删除光标左边三个字符

s | cl 删除当前光标之后的一个字符并进入编辑模式

支持数字:3s,删除光标右边三个字符

S | cc 删除当前整行,保留该空行并且保留缩进,进入编辑模式。

支持数字:3S,删除当前行开始往下3行内容

J 删除当前行的换行符,相当于将下一行内容上移至当前行末尾

# 复制和粘贴

d+位移命令 剪切。(不贴则用作删除)

y 复制

具体操作同剪切(d)

+y 复制到系统剪贴板

yy 复制一行

支持数字:3yy,复制当前行与下面两行

p 粘贴到光标之后

支持数字:3p,粘贴3次

P 粘贴到光标之前

支持数字:3P,粘贴3次

+p 从系统剪贴板粘贴

# 重复和撤销

u 撤销

支持数字,3u,撤销3次

Ctrl+r | . 重做,"."需要在Normal模式下执行

支持数字,3 + Ctrl+R,重做三次

U 重做,一次撤销对一行的操作,再次使用则会撤销前一次的"U"操作

# 移动

方向键 移动

数字+方向键 移动

- 左:向左移动"数字"个字符
- 右:向右移动"数字"个字符
- 上:向上移动"数字"行
- 下:向下移动"数字"行

w | W 移动到下一单词首字符

支持数字,3w,移动到后面3个单词首字符

b | B 移动到前一单词首字符

支持数字,3b,移动到前面3个单词首字符

e | E 移动到下一个单词末字符

支持数字,3e,移动到后面3个单词末字符

$ | <END>键 移动到当前行末尾

支持数字,3$,移动到下3行(当前行为第一行)末尾

0 | ^ | <HOME>键 移动到当前行首

不支持数字

G 移动到最后一行

数字+G 移动到指定行

gg 移动到第一行

ge 移动到前一单词末字符

支持数字,3ge,移动到前面3个单词末字符

数字+% 移动到文档某一位置,如:50%,移动到文档中间,90%,移动到文档靠近尾部

:+数字 移动到文档的某一行

H 移动到当前界面顶部

M 移动到当前画面中部

L 移动到当前界面底部

( 移动到句首

) 移动到句尾

{ 移动到段首

} 移动到段尾

Ctrl+o 光标跳转到之前的位置

Ctrl+i 光标跳转到之后的位置(在使用Ctrl+o之后有效)

# 标记

m+字符 设定标记,将当前光标处用指定字符作为标记

`+字符 跳转到指定标记,如果该字符标记位存在,则会跳转,使用m设定标记

:marks 查看标记

`` 如果使用了G进行跳转,那么该命令则会在当前位置和跳转后的位置进行来回切换

##滚动屏幕

Ctrl+y 向上一行

Ctrl+e 向下一行

Ctrl+u 向上半屏

Ctrl+d 向下半屏

Ctrl+b 向上整屏

Ctrl+f 向下整屏

zt 把当前行置于屏幕顶端

zz 把当前行置于屏幕中央

zb 把当前行置于屏幕底端

# 查找和替换

f+字符 光标跳转到当前行的下一个该字符

F+字符 光标跳转到当前行的前一个该字符

t+字符 光标跳转到当前行的下一个该字符的前一个字符

T+字符 光标跳转到当前行的前一个该字符的前一个字符

; 用来重复 f | F | t | T 这四个命令

% 跳转到匹配成对的括号,包括小括号,中括号,大括号

/ | ? +字符串 搜索一个字符串,

/ 用于向后查找

? 用于向前查找

n 用于该目标字符串的下一个位置(与 / | ? 指定方向同向)

支持数字,3n,该目标字符串在当前查找方向同向的第三次出现的位置

N 用于该目标字符串的上一个位置(与 / | ? 指定方向反向)

支持数字,3N,该目标字符串在当前查找方向反向的第三次出现的位置

\< 单词开始

\> 单词结尾

/<the\>,这样只会搜索单词 "the",而不会搜索到类似 "there"、"them"

$ 匹配一行结尾

. 匹配任意字符

\ 匹配特殊字符

^ 匹配一行开头

* 选取光标当前所在单词向后进行搜索

支持数字,3*,该单词第三次出现的位置

# 选取光标当前所在单词向前进行搜索

支持数字,3#,该单词第三次出现的位置

# 替换文本

:s/文本1/文本2/ 用文本2替换第一次出现的文本1

:s/文本1/文本2/g 用文本2替换当前行所有匹配到的文本1

:%s/文本1/文本2/g 用文本2替换整个文件中所有匹配到的文本1

:%s/文本1/文本2/gc 用文本2替换整个文件中所有匹配到的文本1,并且每次替换时确认

r 等待键入下一个字符,用于替换当前光标处的字符

支持数字,3r+键入字符,当前光标处开始,往后3个字符替换为键入的字符,如果替换为换行符,则只会替换为一个