【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次
【参考】

浙公网安备 33010602011771号