你的位置:首页 > 操作系统

[操作系统]如何更高效的使用Vim?


   1. Vim的操作模式 - 先用起来

如果不知道Vim的这两种模式(命令模式 和 Insert模式),你连最基本的编辑保存都做不到,更别说高效了。Vim可以傲视群雄(嘘~别让Emacs听见)就依赖于这种设计思想。

命令模式启动Vim后,即在命令模式下。Vim的精华全在该模式下,放到下一节再说
Insert模式按下 i 键,编辑器左下角显示“--插入--”字样,即进入Insert模式,此时可以像记事本一样编辑文本了
两个模式切换i 进入 Insert 模式,按 ESC 回到命令模式

 
你还需要知道一些最基本的命令,才能正常使用Vim工作(但还谈不上高效):
:wq存盘 + 退出 (:w 存盘, :q 退出)
ZZ也是存盘+退出(我一般用这个,吹毛求疵的说,比:wq快那么几毫秒吧)
x删当前光标所在的一个字符
dd删除当前行,并把删除的行存到剪贴板里
p粘贴剪贴板
hjkl光标移动(虽然“上下左右”键也可以用,但依然吹毛求疵的说,hjkl不用把手移到方向键上,快不止几十毫秒吧)

 

2. 命令模式 - 带你装×带你飞


命令模式如果还要细分的话,可以分为指令模式(输入各种快捷键)和行末模式(输入各种命令),下面分别说明。

  2.1 指令模式 - 常用快捷键

  在命令模式下,只要不按“:”,就是指令模式,几乎每个按键都是一个快捷键,知道下面这些快捷键,你才能飞一般的使用Vim。
插入模式 删除(剪切)/拷贝/粘帖
i在光标处插入 d删除(剪切),需要和光标移动命令结合使用,比如dw: 删除字符到下个单词的开始
a在光标后插入 y拷贝,同d
o在当前行后插入一个新行 dd删除(剪切)当前行
O(大写)在当前行前插入一个新行 yy拷贝当前行
cw删除光标到单词结尾,并进入插入模式 p(小写)在光标后粘帖
 光标移动 P(大写)在光标前粘帖
 0(数字零)到行头 Undo/Redo/多次do
^到本行第一个非空字符的位置 uundo
$到行尾 <Ctrl-r>redo
g_到本行最后一个非空字符的位置 .重复上个命令
b到上一个单词的开始 数字n+命令执行命令n次,比如3dd:删除3行
w到下一个单词的开始 大小写替换
e到下一个单词的结尾 gU变大写
gg到第1行 gu变小写
G到最后一行  可视化
nG, :n到第n行,如 “13G”或“:13”,光标移动到13行  v
进入visual模式后可以选择一个代码块,然后进行操作了,非常棒的一个功能是代码自动对齐,只要选中代码块之后按“=”键即可。

  2.2 行末模式 - 常用命令

  在命令模式按“:”键进入行末模式,此时可以在行末输入各种命令了,下面是最常用的命令:
打开/保存/退出/改变文件
:q退出
:w保存
:x, :wq, ZZ保存并退出(:x 表示仅在需要时保存,ZZ不需要输入冒号和回车)
:saveas <filePath>另存为
:q!退出不保存
:qa!强行退出所有的正在编辑的文件,不保存
:e <filePath>打开一个文件
:bn 和 :bp通过:e打开多个文件后,使用这两个命令来切换下一个或上一个文件
:n光标移动到第n行,如":13"移动到13行

 

  

   3. 高级技巧

如果觉得不过瘾,这儿还有更高级的内容。说明:虽然是高级技巧,但都非常实用,而且会大呼过瘾,几百年不用的技巧这儿就不写了)

  3.1 查找和替换

  (1)查找

行内查找
f向后查找(“fa”定位到下一个“a”的位置)
F向前查找(“Fa”定位到上一个“a”的位置)
t向后查找(“ta”定位到下一个“a”之前一个字符)
T向前查找(“Ta”定位到上一个“a”之前一个字符)
全文查找
/向下查找,支持正则表达式。“n”继续查找,“N”反向继续查找
?向上查找,同上
*向下查找,匹配光标所在的单词(字符串)
#向上查找,同上
%查找匹配的括号,包括(,[,{。需要先把光标移动到括号上。碉堡了!

    

  (2)替换

语法为 :  [addr]s/源字符串/目的字符串/[option]
[addr]表示检索范围,省略时表示当前行。
如:“1,20” :表示从第1行到20行;
  “%” :表示整个文件,同“1,$”;
  “. ,$” :从当前行到文件尾;
s表示替换操作
[option]表示操作类型
如:g 表示全局替换; 
      c 表示进行确认;
      p 表示替代结果逐行显示(Ctrl + L恢复屏幕);
      省略option时仅对每行第一个匹配串进行替换;
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
示例
:%s/源字符串/目的字符串/g全局替换
:%s/\(That\) or \(this\)/\u\2 or \l\1/g  将That or this 换成 This or that
(1)把正则表达式放进\(\)中,在后面即可用\1,\2访问\(\)中的内容;
(2)\u首字母大写; \l首字母小写
:%s/  */ /g  将多个空格换成一个空格
:%s/\([:.]\)  */\1 /g 将句号或冒号后的多个空格替换为一个空格
:%s/^/  / 在每行的开始插入两个空白

 

  3.2 自动补全

  <Ctrl-p>向上查找  <Ctrl-n>向下查找。使用<Ctrl-p>或<Ctrl-n>会列出之前键入过的单词

  

  3.3 块操作

  在命令模式下按<Ctrl-v>进入块模式,最常用的功能是同时操作多行,步骤如下:

  (1)按<Ctrl-v>进入块模式

  (2)通过光标选择要处理的区域块

  (3)按"I"在区域块之前插入,按“A”在区域块之后插入

  (4)插入完毕后按<ESC>使每一行生效

  3.3 分屏

 

        3.4 代码格式化