【vim】正常模式下的一般操作
正常模式一般用于浏览文本,其实也就是通过键盘命令让光标在文本中跳来跳去,在任何模式下按一次或两次<Esc>会进入正常模式。
基本思想
vim对光标的定位操作非常精确和高效,这是它的一个非常好用的地方。但是,由于按键和按键组合太多太复杂,会让好多初学者望而却步。
其实,vim的光标定位是有规律的,就好像当初学五笔打字一样,看起来要记很多字根,其实键盘上字根的排列是非常有规律的,一旦清楚这些规律,学习就会心里有数很多。
vim的光标定位一般需要指定以下几个参数:
- 移动的范围
- 移动多少个单位
- 向前还是向后
通过这几个参数的组合,可以指定非常自由灵活的定位操作。移动的范围,或者说<单位>从小到大包括字符、单词、行、句子、段落、函数、屏幕、页面和文件。
常用定位命令
下面给出不同<单位>对应的基本光标定位指令:
单位 | 命令 | 说明 |
字符 | h | 左移1个字符 |
l | 右移1个字符(字母l) | |
f<c>、F<c> | 移动到本行下一个字符<c>、上一个字符<c> | |
t<c>、T<c> | 移动到本行下一个字符<c>之前、上一个字符<c>之后 | |
单词 | w、W | 移动到下一个单词的开头,大写是以空格分隔的单词 |
b、B | 移动到上一个单词的开头,大写同上 | |
e、E | 移动到当前单词的末尾,大写同上 | |
* | 跳到下一个相同单词 | |
# | 跳到上一个相同单词 | |
g* | 跳到下一个包含当前单词的单词处 | |
g# | 跳到上一个包含当前单词的单词处 | |
行 | j | 向下移动1行 |
k | 向上移动1行 | |
0 | 移动到行首 | |
^ | 移动到行首第一个非空白字符 | |
$ | 移动到行尾 | |
<n>| | 移动到当前行第n列,比如12|是移动到第12列 | |
<n>G | 移动到第n行,比如12G是移动到第12行 | |
+ | 移动到下一行第一个非空白字符处 | |
- | 移动到上一行第一个非空白字符处 | |
句子 | ) | 移动到句尾 |
( | 移动到句首 | |
段落 | } | 移动到段尾 |
{ | 移动到段首 | |
% | 跳转到匹配的括号,如果光标在括号中间,移动到前一括号 | |
函数 | } | 到下一个空行 |
{ | 到上一个空行 | |
]] | 到下一个行首的{ | |
[[ | 到上一个行首的{ | |
][ | 到下一个行首的} | |
[] | 到上一个行首的} | |
gd | 到当前局部变量的定义处 | |
屏幕 | H | 移动到屏幕最上面一行 |
M | 移动到屏幕中间一行 | |
L | 移动到屏幕最下面一行 | |
<Ctrl>+e | 屏幕向下滚动一行,光标不动 | |
<Ctrl>+y | 屏幕向上滚动一行,光标不动 | |
zt | 将当前行移动到屏幕顶端 | |
zz | 将当前行移动屏幕中间 | |
zb | 将当前行移动到屏幕底端 | |
页面 | <Ctrl>+f | 向下滚动一页 |
<Ctrl>+b | 向上滚动一页 | |
<Ctrl>+d | 向下滚动半页 | |
<Ctrl>+u | 向上滚动半页 | |
文件 | gg | 移动文件开头 |
G | 移动文件末尾 | |
<n>% | 移动到文件n%处,比如30%是定位到文件30%处 |
还有:
[+ctrl+i 跳转到函数、变量或宏的定义处
[+ctrl+d 跳转到宏定义处
ctrl+i 跳到下一次光标位置(相当于浏览器的前进)
ctrl+o 跳到上一次光标位置(相当于浏览器的后退)
组合命令示例
上文已经说了,通过灵活地进行定位参数组合,可以实现灵活的光标定位操作,以下是一些示例。
6j 往下移动6行
ge 移动到上一个单词的最后一个字符
3fx 移动到本行下3个字符x
4$ 移动到本行下面第4行的末尾字符
3H 移动到屏幕下面第3行
当加上编辑命令(复制,剪贴等,后面文章介绍)后,组合会更复杂而灵活。
不常用的定位命令
ga 查看光标处字符的ascii码
g8 查看光标处字符的utf-8编码.
(小数点) 可以重复上一次的命令
<n><Command> 重复某个命令n次
【参考】