Vi/Vim的使用方法
Linux必备技能,熟练掌握。
Vi / Vim的使用方法
一、vi/vim基本指令
vi/vim 共有三种模式:
- 命令模式(Command mode):进入vi的初始模式。
- 输入模式(Insert mode):按键
i
、a
、o
进入,按键ESC
退回命令模式。 - 底线命令模式(Last line mode):按冒号
:
进入,可以输入复杂命令。命令以回车运行,同时退回命令模式。
基本原则:大小写敏感!数字、次数加在命令前!
(一)命令模式
- 屏幕显示
ctrl-e
翻一行(显示下一行);ctrl-d
翻半屏;ctrl-f
翻一屏ctrl-y
往回翻一行(显示上边一行);ctrl-u
往回翻半屏;ctrl-b
往回翻一屏zz
当前行居中;zt
当前行置顶;zb
当前行置底
- 方向导航
h
前j
下k
上l
后
20j
相当于按20下j
- 按键导航
1)绝对定位
25G
跳至第25行行头(等同于:25
)G
文件尾行的头;gg
文件首行的头
2)短距离相对定位
w
下一个“词头”;b
前一个“词头”e
下一个“词尾”;ge
前一个“词尾”fx
本行下一个x;Fx
本行上一个x0
(零) 行头;^
非空行头;$
行尾
3)长距离相对定位
H
屏幕显示的第一行行首;M
屏显中间行行首;L
屏显尾行行首
4)其他
ctrl-o
上次的定位;ctrl-i
下次的定位%
下一个匹配的括号
- 查找
/字符串
查找下一个匹配;?字符串
向前查找上一个匹配- 查找后,
n
再次查找;N
反向再次查找。
- 定位
mx
做x标记(x为26个字母);`x
跳转到x标记处;'x
跳转到x标记所在行行首
- 改写
rx
改写光标所在字符为x;R
进入取代模式,持续改写,直到按ESC
退出。~
将光标所在字符进行大小写转换,并定位到下一个字符。J
将光标所在行与下一行合并成一行(两行间用1个空格隔开)。
- 删除、复制、粘贴
x
删除当前一个字节;X
退格删除一个字节d方向
删除(按方向)。例如:d$
删除到行尾;5dw
删除一个词并执行5遍,即删除5个词。- 方向包括:
0
(零) 行头;^
非空行头;$
行尾;.
通配一个字符;等等。
- 方向包括:
D
删除包括当前位至行尾(等同于d$
)dd
删除当前行(等同于:d
)c方向
删除并转为输入模式(按方向)。y方向
复制(按方向)。yy
复制当前行P
在光标处,粘贴上次删除的内容 (剪切粘贴);p
在光标后
- 重复
.
重复前一个动作。
- 撤销
u
撤销一次;ctrl-r
恢复撤销,重做。
(二)输入模式
- 进入输入模式:
i
光标前;I
行前a
光标后;A
行尾o
下新建一行;O
上新建一行
- 临时取代模式:
R
进入取代模式(Replace mode),输入将一直取代光标所在处的文字,直到按下ESC
退出。r
取代一次,例如rx
用x取代光标所在字符。
(三)底线命令模式
- 查找替换
:s/找/换为
替换当前行第一次:s/找/换为/标识
其中标识:g
替换当前行的所有;c
询问。例如::s/word1/word2/gc
(y
本次是;n
本次否;a
所有是;q
所有否;l
本次是后边全否)- 可以加范围:
:2,5
第二行至第五行;:2,
,从第二行到最后。例如::2,5s/找/换为
,第2至5行的每行第一个替换。:.
当前行:$
最后一行:%
所有行。例如::%s/找/换为/gc
,全文全部替换,每次询问:g/找/
所有包含的行:'x
标记x
/
间隔符可以用#
或+
替代
- 文件
-
:q
退出;:q!
不存盘退出(等同于ZQ
);:x
存盘退出(等同于ZZ
);:wq
强存盘退出 -
:w filename
另存为filename;:2,5w filename
2-5行另存为filename。 -
:r filename
读取文件,并在当前行的下一行插入文件filename的内容。
- 临时运行外部命令
:!command
暂时离开 vi/vim,执行command并显示结果。例如:!ls /home
- 设置
- 显示/不显示行号:
:set number
和:set nonumber
默认。(带no
是设回,默认) - 查找时,忽略大小写,均匹配:
:set ignorecase
- 突出显示当前行:
:set cursorline
- 自动缩进,即每行的缩进同上一节相同:
:set autoindent
- 高亮搜索结果:
:set hlsearch
- 不自动换行:
:set nowrap
通用: :set XXX&
将XXX项设回默认值。
设置只对当前任务,关闭后再开无效。
如希望修改vim的默认设置,编辑vimrc
文件(unix:/.vimrc
;windows:目录/_vimrc
)中添加:set XXX
二、高级操作
(一)可视化选择模式
vi/vim 可以可视化选择,即进入可视模式(Visual Mode)。包括:
- 字符选择模式: 选中光标经过的所有字符,普通模式下按
v
进入 - 行选择模式:选中光标经过的所有行,普通模式下按
V
进入 - 块可视化模式:选中一个矩形内的文本,普通模式下按
ctrl-V
进入
退出按ESC
或再按v
。
- 可视化选择
进入可视模式后,操作h
、j
、k
、l
选中文本。o
转换前后选择焦点。此外还可通过:
v i[
选中[]中间内容,不包括[]。其他括号类似。v i"
选中"“中间内容v it
选中中间的内容v ib
选中一个blockv is
选中一个句子v iw
选中一个单词v ip
选中一个段落
注意:v a
和v i
类似,但包括边界,即包括[]。 注意:a
和i
前可以加数字,代表多层。
- 选中后的操作
1)传统d
、c
、y
、p
等操作。
2)J
将高亮显示的文本内容合并为一行,同时以空格来分隔各行。
3)<
左缩进;>
右缩进;=
自动缩进。
(二)分割窗口
- 上下分屏:
:split filename
上下分屏(平均分);指定3行分屏:3split filename
- 注意新分出来的屏幕在上方,内容为filename,操作焦点转为新屏。
- 如提供的filename不存在,新建filename。
:new
不指定filename的新建上下分屏。:split
如不提供filename,新屏复现原屏内容。等同于ctrl+w s
- 缩写
:sp
-
左右分屏:
:vsplit filename
;缩写:vsp
;新建分屏:vertical new
;等同ctrl+w v
-
切换分屏焦点:
crtl+w w
ctrl+w h,j,k,l
ctrl+w 上下左右
- 分屏互换位置
crtl+w r
互换分屏窗口位置;焦点不变、跟着换。
- 调节窗口大小
ctrl-w +
、ctrl-w -
、ctrl-w =
、
- 关闭分屏
:close
等同ctrl+w c
关闭当前窗口:only
仅保留当前分屏,关闭其他
最后修改于 2024-02-24