Fork me on GitHub

vi技巧

vi skills

Posted by Kaelzhang on June 29, 2015

img

初时,先有ed,ed为ex之父,ex为vi之父,而vi为vim之父。 –The Old Testament of Unix

使用vim已经有一段时间了,有必要分享一些vim资源并备份相关技巧。

##vim快捷键

  • 模式
    • Esc:普通模式
    • i:插入模式
    • v:视图模式
    • ::命令行模式
  • 移动
    • h:左移
    • l:右移
    • j:下移
    • k:上移
    • w:下一个短单词
    • W:下一个长单词(以空格区分)
    • b:至词首(短单词)
    • B:至词首(长单词)
    • e:至词尾(短单词)
    • E:至词尾(长单词)
    • ^:至行首
    • $:至行尾
    • gg:至文件头
    • G:至文件尾
    • nG(:n):至第n行
    • J:把当前行和下一行连接在一起
    • K:查看单词的手册页
    • n:下一个匹配项
  • 文本插入
    • i:光标前插入
    • a:光标后插入
    • I:^i 行首字符前插入
    • A:$a 行尾字符后插入
    • o:换行插入
    • O:上面空出一行并插入
  • 文本删除
    • x:删除当前字符
    • dl:删除一个字符
    • db:删除从光标起始位置到单词开头的内容
    • dw:删除从光标起始位置到单词结束的内容
    • dd:删除当前行
    • daw:删除一个单词(delete a word)dbx、bdw
    • dap:删除一个段落
  • 复制粘贴
    • yyp:复制当前行并粘贴
  • 文本修改
    • c:修改
    • C: c$ 修改光标至行尾
    • s: cl 替换
    • S: ^ C 修改整行
    • g~:反转大小写
    • gU:转换为大写
    • gu:转换为小写
    • :增加缩进

    • <:减少缩进
    • =:自动缩进
    • gg=G:自动缩进整个文件
  • 文本选择
    • viw:选中一个单词
    • vit: 高亮选中标签内部的内容(visually select inside the tag)
    • gv:重选s上次的高亮选区
    • v:激活面向字符的可视模式
    • V:激活面向行的可视模式
  • 查找替换
    • *:查找匹配项
    • f: 向后查找字符
    • F: f的反向操作
    • t: 向后查找字符光标位于查找字符前方
    • T: T的反向操作·
  • 重复&回退
    • .:重复上次修改
    • u:撤销最近修改
    • @x:执行一系列修改
    • ;:在行内查找下一指定字符
    • ,:;的反向操作
    • n:在文档中查找下一处匹配项
    • N:n的反向操作
    • @::重复任意Ex命令
    • &:重复上次的:substitute 命令(它本身也是一条Ex命令)
  • 注释
    • \\:注释当前行
    • \ap:注释当前段落
    • \G:从当前行到文件结尾间的所有内容注释掉
  • 快捷键
    • <C-[>:和键相同
    • {register}:把寄存器复制的文本粘贴到光标所在位置
    • :删除前一个字符(同退格键)
    • :删除前一个单词
    • :删至行首
    • :数字累加
    • :数字累减
    • :可以在可视模式及选择模式间切换
    • :按列选择
  • EX
    • [range]delete [x] :删除指定范围内的行[到寄存器 x 中]
    • [range]yank [x]:复制指定范围的行[到寄存器 x 中]
    • [line]put [x]:在指定行后粘贴寄存器x中的内容
    • [range]copy {address}:把指定范围内的行拷贝到 {address} 所指定的行之下
    • [range]move {address}:把指定范围内的行移动到 {address} 所指定的行之下
    • [range]join:连接指定范围内的行
    • [range]normal {commands}:对指定范围内的每一行执行普通模式命令 {commands}
    • [range]substitute/{pattern}/ {string}/[flags]:把指定范围内出现{pattern}的地方替换为{string}
    • [range]global/{pattern}/[cmd]:对指定范围内匹配{pattern}的所有行,在其上执行 Ex 命令{cmd}
    • [range]写法::{start},{end},如::2,5y
    • 地址偏移::{address}+n,如::.,.+3p
    • :p即:print打印命令
    • :t即:copy复制命令
    • :m即:move移动命令
    • @:即重复执行上一次EX命令,之后可以用@@来重复该命令
符号 地址 示例
1 文件的第一行 :1p
$ 文件的最后一行 :.,$p
0 虚拟行,位于文件第一行上方 :0
. 光标所在行 :.p
‘m 包含位置标记m的行 :’mp
’< 高亮选区的起始行 :’<p
’> 高亮选区的结束行 :’<,’>p
% 整个文件(的简写形式) :%p
命令 用途 格式 示例
:t(:copy :co) 复制行 :[range]copy {address} :6t.
:m(:move) 移动行 :[range]move {address} :’<,’>m$
:normal 普通命令模式 :[range]normal {address} :%normal A;

练习

li.one a{ background-image: url(‘/components/sprite.png’); } li.two a{ background-image: url(‘/components/sprite.png’); } li.three a{ background-image: url(‘/components/sprite.png’); }

var foo = 1; var bar = ‘a’; var foobar = foo + bar;

def fib(n): a, b = 0, 1 while a < n: print a, a, b = b, a+b fib(42)


  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!