Vim工作模式
https://www.runoob.com/linux/linux-vim.html
首先看个图
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)
在命令模式中按下i 等命令可以进入输入模式,进行正常的文字输入。
输入模式中按下Esc键可以退回命令模式。
命令模式按下: 可以进入底线命令模式。按Esc可退出
基本用法
vim 加文件名可以打开并编辑某一个文件。也可以打开文件夹
vim [filename]
以下所有n均表示数字
移动光标
hjkl 分别表示←↓↑→ 每次移动一格
可以通过数字组合键比如30j,来向下移动30行
space 空格键向后移动光标,会自动换行。l不会
-
- 光标移动到下一行的第一个非空格符
-
- 光标移动到上一行的第一个非空格符
-
0 等同于home
-
$ 等同于end键
-
G 移动到最后一行
-
nG n为数字,移动到第n行
-
n回车 向下移动n行
-
gg 相当于1G,回到第一行
-
ctrl f 向下翻页(pagedown)
-
ctrl b 向上翻页(pageup)
-
ctrl d 向下半页
-
ctrl u 向上半页
搜索和替换
- /word 向下搜索word
- ?word 向上搜索word
- n 下一个匹配结果
- N 上一个匹配结果
替换
- :n1,n2s/word1/word2/g
- :1,$s/word1/word2/g 或 :%s/word1/word2/g
- :1,$s/word1/word2/gc 或 :%s/word1/word2/gc
删除/复制/粘贴
-
x 向后删除,delete
-
X 向前删除,backspace
-
nx 删除n个字符
-
dd 删除当前行
-
ndd n是数字,向下删除n行
-
d1G 删除第一行到当前行
-
dG 删除当前行到最后一行
-
d0 删除行首到当前字符
-
d$ 删除当前字符到行尾
-
yy 复制当前行
-
nyy 复制n行
-
y1G 复制第一行到当前的所有数据
-
yG 复制当前行到最后一行
-
y0 复制行首到当前字符
-
y$ 复制当前字符到行尾
-
p 复制到当前行的下一行
-
P 复制到当前行的上一行
-
J 删除当前行的换行符(合并行)
-
c 还没弄明白 10cj删除10行,和10dd有啥区别?
-
u 撤销
-
ctrl r 恢复
-
. 重复上一个动作
命令行操作
-
:w 保存
-
:w! 强制保存
-
q 退出
-
q! 强制退出,丢弃修改
-
:wq 存储后修改
-
ZZ 等同于wq
-
ZQ 等同于q!
-
w [filename] 保存到指定文件
-
r [filename] 读取指定文件内容
-
! command 暂时离开vi,执行shell命令
-
:set nu 显示行号
-
:set nonu 取消显示行号
-
vi" 选中两个"之间的内容
vimdoc
- J 删除换行
- u撤销 ctrl R 恢复
- w 移动到下一个词的词首 b 移动到上一个词词首
- e 移动到下一个词词尾 ge 移动到上一个词词尾
- 括号匹配 % 移动到对应匹配的括号
- gg 移动到首行 G 最后一行 xxgg xxG 移动到xx行
- `` 或者 '' 跳转回之前所在的行
- CTRL F = pagedown , CTRL D = 1/2 pagedown
- CTRL B = pageup , CTRL U = 1/2 pageup
- * 向下查找当前光标所在单词, # 向上查找 (单词完全匹配,如果要部分匹配,使用g* g#)
- 查找整个单词 < 只匹配单词开头 >只匹配单词结尾 <xxx>只匹配单词
- :jumps 输出可跳转的位置列表
- m+ a-z 可以打标记 '+a-z 跳转到标记 或者` +a-z
- dw 删除单词 dd删除行 d$ or D 删到最后 dfx 删除到字符x