用Vim优雅的编辑

来源:互联网 发布:女用避孕套 知乎 编辑:程序博客网 时间:2024/06/05 15:49

这篇文章首发于我的博客,转载可注明出处。

Vim是从vi发展起来的一个超简洁的文本编辑器,全称为Vi IMporved。使用vim可以实现全键盘操作,摆脱鼠标操作痛苦。

Vim简介

Vim的设计理念是命令的组合。在Vim中可以使用各种各样的组合命令来完成我们的编辑。模式是一个编辑器所必备的,几乎所有的编辑器都会有插入和执行两种模式,可以用键盘和鼠标完成模式的切换和命令的执行。Vim具有挺多种模式,常用的有普通模式、插入模式、可视模式和命令行模式。

其中Vim强大的编辑能力有很大一部分来源于它的普通模式,而普通模式的强大就在于命令的组合。在本文的后半部分我们将看到普通模式下的一些常用命令。

在正式开始盛宴之前,我们先来几条小小的约定。

1. 停顿时请移开画笔。
不同于其他编辑器将插入模式作为默认状态,普通模式才是Vim的默认状态。所以,只在编写代码的那几分钟内进入插入模式,其他时候请保持普通模式。

2. 告别esc,远离方向键。
Vim可以有两种方式实现普通模式和插入模式之间的切换,esc<C-[>(就是Control+[),可两种方式都很难操作,esc太远,Control偏下,为此我们可以尝试调换CapslockControl的位置,并将<C-[>作为默认切换方式。

方向键由于距离太远将会极大的减缓我们的操作效率,Vim中我们将用hjkl分表代表上下左右。

3. 强大的重复操作符.
之所以将它放在约定中,是因为使用重复操作会呈几何倍数的提高我们的效率。.命令可以重复修改上次的操作,它是Vim中最强大的多面手。

插入模式

前面提到大部分命令在普通模式下执行,不过有些功能在插入模式下可以更好的执行。

  • <C-a> 跳转到当前行首
  • <C-b> 向前移动一个单词
  • <C-d> 减少缩进
  • <C-h> 删除前一个字符(同Backspace
  • <C-k> 删除当前行光标后面的内容
  • <C-w> 删除前一个单词
  • <C-u> 删除至行首
  • <C-t> 增加缩进

这里只列出几个较常用的,更多可以查看:help insert-index,里面有很详细的命令解释,另外这些命令并不是Vim独有的,在shell中一样可以用。

普通模式

普通模式下我们可以执行大多数操作,并可以将操作符和动作命令结合起来实现强大的功能。还记得怎么进入普通模式吗?对了,就是<C-[>

1. 移动和跳转

单行跳转

  • h 左移一个字符
  • j 下移一个字符
  • k 上移一个字符
  • l 右移一个字符
  • 10h 向下移动10行

单词跳转

  • w 跳到下一个单词的词首
  • e 跳到下一个单词的词尾
  • b 跳到上一个单词的词首
  • nw 跳转到后面第n个单词

行内跳转

  • ^ 跳到当前行的开头(忽视行首空格)
  • 0| 跳到当前行的开头(包括行首空格)
  • $或 跳到当前行的行尾
  • g _ 跳到当前行的行尾(不包括空格)
  • f x 跳到本行的下一个x处
  • F x 跳到本行的上一个x处
  • ; 重复上一次跳转
  • n| 跳到当前行的第n列

文档内跳转

  • gg 跳到文档第一行
  • G 跳到文档最后一行
  • nggnG 跳到文档的第n行
  • + 跳到下一行行首
  • - 跳到上一行行首

当前屏幕跳转

  • H 移动到当前屏幕的顶端
  • M 移动到当前屏幕的中间
  • L 移动到当前屏幕的底端

移动当前行

  • zz 移动当前行到中间
  • zt 移动当前行到屏幕顶端
  • zb 移动当前行到屏幕底端

2. 搜索和标记

文档内检索

  • /+xxx 查找xxx
  • * 查找下一个光标所在的单词
  • # 查找上一个光标所在的单词
  • n 跳到下一个查找的单词
  • N 跳到上一个查找的单词
  • :noh 取消本次高亮

文档内标记

  • m x 标记当前位置为x
  • ' x 跳到标记为x的位置
  • ' ' 跳到跳转之前的位置

3. 即时执行操作

切换到插入模式

  • i 插入到光标前
  • a 插入到光标后
  • I 插入到当前行的开始
  • A 插入到当前行的末尾
  • o 向下插入一行
  • O 向上插入一行

普通模式下编辑

  • r 修改当前字符(改完后自动切换)
  • R 修改自光标起及之后的字符(需手动切换到普通模式)
  • x 删除当前字符
  • X 删除光标前的字符
  • s 删除当前字符并进入插入模式
  • S 删除当前行并进入插入模式
  • c 修改(一般用于合成命令)
  • d 剪切(一般用于合成命令)
  • y 复制(一般用于合成命令)
  • dd 删除当前行
  • yy 复制当前行
  • p 粘贴到当前行的下方
  • P 粘贴到当前行的上方
  • ~ 大小写反转

撤销和恢复撤销

  • u 撤销上一步操作
  • <C-r> 恢复上一步操作

缩进

  • > 增加缩进
  • < 减少缩进
  • = 自动缩进

可视模式

Vim的可视模式类似于其他编辑器按住鼠标拖动选择区域,却又有些许不同,在可视模式下可以使用普通模式的命令来操作。

激活可视模式

  • v 激活面向字符的可视模式
  • V 激活面向行的可视模式
  • <C-v> 激活面向列的可视模式
  • gv 重选上次的高亮区域

切换可视模式

  • o 在可视模式下可以切换选取的活动端

命令模式

在命令模式下我们可以为Vim开辟一块新天地。命令模式下,可以使用复杂的命令。在编辑模式下键入:,光标就跳到屏幕最后一行,并在那里显示冒号,此时已进入命令模式。这篇文章不过多介绍命令模式。

打开、保存和退出

  • :e test.txt 在打开的vim中打开test.txt文件
  • :w 保存当前文件
  • :q 退出当前文件
  • :w test2.txt 另存文件为test2.txt(原文件依然存在)
  • :qall 退出多个文件
  • :q! 强制退出当前文件(所做的修改将不会保存)
  • :wq 保存并退出当前文件

分屏

  • :sp(lit) 上下分屏
  • :vsp(lit) 左右分屏
  • <C-w>+hjkl 在不同屏之间切换

标签页

  • :tabnew 新建标签页
  • :tabnew filename 在新标签页中打开文件
  • :tabn(ext) 跳到下一个标签页
  • :tabN(ext) 跳到上一个标签页
  • :tabfir(st) 跳到第一个标签页
  • :tabl(ast) 跳到最后一个标签页
  • :tabo(nly) 关闭除当前标签页以外的其他标签页

芳草有情皆碍马,好云无处不遮楼。编辑器加IDE成百上千,没有孰好孰坏,只要是对的便是最好的。学问,重在内功修炼。