参考

基本操作

基本概念

动作:是指移动光标的操作,你肯定很熟悉 h、j、k 和 l,以及 w 和 b。但其实,/ 也是一个动作。

1
:h navigation 

操作符: 对某个区域文本执行的操作。比如,d、~、gU 和 > 都是操作符。这些操作符既可以在普通模式下使用,也可以在可视模式下使用。

1
    :h operator

文本对象:

1
:h text-objects

缓冲区列表

缓冲区的几种状态:已激活,已载入,已列出,已命名

1
2
:ls  #列出所有可以列出的缓冲区
:ls! #命令可以显示被放入缓冲区列表的和未被放入列表的缓冲区

创建一个无名临时缓冲区

1
:enew

激活一个缓冲区

1
:e file2 

命名一个缓冲区

1
:w /path/file #存储位置

参数列表

1
:h argument-list

操作命令范围概念 关键字符:,|;|数字|$|%

跳转历史和变更历史

1
2
3
4
:jumps
:changes
:h changelist
:h jumplist

常用命令

space-Vim使用文档 空格 f t 打开/关闭树型栏 SPC f R 刷新文件结构目录 , f c unite命令集合快速查找命令集 SPC b h 返回vim主页 SPC f r 最近打开过的文件清单

markdown插件命令

,1..3 快速标题格式###生成章节 ,ct 在当前位置插入所有章节的清单 ,cs 新建窗口显示博客章节目录清单,支持编辑时跳转到指定的章节位置 ,cp 预览博客发布的效果

git插件命令

SPC g s git status SPC g d git diff AsyncRun git add file git add file SPC g c git commit SPC g p git push

unite

Vim插件:Unite新手指导(译) Unite可以在一个项目中快速浏览文件。但是它不仅限于文件,其他任何可以列出的东西都可以很好的被显示和搜索。这个开放式的特性很可能是人们找到它的原因

用法

Unite命令采用的格式为:Unite source,其中"source"是buffer,file和file_rec其中之一。

buffer: 浏览当前打开的buffer列表 file: 浏览当前目录的文件列表 file_rec: 递归的列出当前目录的文件 当一个命令被使用,一个新的水平分割窗口会被打开。 比如,命令:Unite file将会显示当前目录的文件列表。在这个窗口中,标准的Vim命令模式下的命令可以使用。可以使用“j”和“k”浏览该列表,可以使用“/”来查询。如果你在一个文件上按下enter键,Unite将会打开它。如果光标是在一个目录上,Unite将会进入该目录,并且更新该文件列表。 使用NERO Tree命令 查看帮助命令

1
?

将选中的目录变为根目录:

1
C  # change tree root to the selected dir

模式

插入搜索模式

如果你在Unite窗口进入插入模式,光标将会移到该窗口的最上方,并显示“>”提示符。输入字符会搜索该列表–这里和FuzzyFinder相似。和常规vim一样,按键可以退出插入模式回到命令模式。

命令模式

在命令模式下,当光标在一个文件上,按下a,Unite会显示一个可以操作该文件命令的列表。这个命令列表被称为actions,这个列表可以像Unite其他部分一样被搜索和调用。

操作

actions可以组合通配符。如果输入:Unite file, 然后按下*将会标记所有文件,再输入a将会列出所有actions,最后选择above,Unite将会打开所有被标记的文件。

单行操作

光标移动

hjkl (强例推荐使用其移动光标,但不必需) →你也可以使用光标键 (←↓↑→). 注: j 就像下箭头。

  1. 单词移动: 1.一个单词由字母,数字和下划线组成,那么就用小写的e和w。即:程序变量移动。 2.单词是由blank字符分隔符,那么就用大写的E和W。 即:程序语句移动。
1
2
3
  w → 到下一个单词的开头。
  e → 到下一个单词的结尾。
  b → 到前一个单词的开头。
  1. 本行移动:
1
2
3
4
0 → 数字零,到行头
^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
$ → 到本行行尾
g_ → 到本行最后一个不是blank字符的位置。
  1. 行间移动:
1
2
3
NG → 到第 N 行 (陈皓注:注意命令中的G是大写的,另我一般使用 : N 到第N行,如 :137 到第137行)
gg → 到第一行。(陈皓注:相当于1G,或 :1)
G 到最后一行

多行范围

范围 (Ranges) 其实很好理解,但很多 Vim 用户的理解不到位。

  • 很多命令都可以加一个数字,用于指明操作范围
  • 范围可以是一个行号,用于指定某一行
  • 范围也可以是一对通过 ,; 分割的行号
  • 大部分命令,默认只作用于当前行
  • 只有 :write:global 是默认作用于所有行的

范围的使用是十分直观的。以下为一些例子(其中,:d:delete 的缩写):

命令操作的行
:d当前行
:.d当前行
:1d第一行
:$d最后一行
:1,$d所有行
:%d所有行(这是 1,$ 的语法糖)
:.,5d当前行至第 5 行
:,5d同样是当前行至第 5 行
:,+3d当前行及接下来的 3 行
:1,+3d第一行至当前行再加 3 行
:,-3d当前行及向上的 3 行(Vim 会弹出提示信息,因为这是一个保留的范围)
:3,'xdelete第三行至标注 为 x 的那一行
:/^foo/,$delete当前行以下,以字符 “foo” 开头的那一行至结尾
:/^foo/+1,$delete当前行以下,以字符 “foo” 开头的那一行的下一行至结尾

需要注意的是,; 也可以用于表示范围。区别在于,a,bb 是以当前行作为参考的。而 a;bb 是以 a 行作为参考的。举个例子,现在你的光标在第 5 行。这时 :1,+1d 会删除第 1 行至第 6 行,而 :1;+1d 会删除第 1 行和第 2 行。

可视化区域选择并编辑文本

1.区域选择其命令格式:

  <action>a<object> 或 <action>i<object>

在visual 模式下,这些命令很强大。

action可以是任何的命令,如 d (删除), y (拷贝),v (可以视模式选择)object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 ‘、 )、 }、 ]。

示例: 假设你有一个字符串 (map (+) (“foo”)).而光标键在第一个 o 的位置。

1
2
3
4
5
6
  vi" → 会选择 foo.
  va" → 会选择 "foo".
  vi) → 会选择 "foo".
  va) → 会选择("foo").
  v2i) → 会选择 map (+) ("foo")
  v2a) → 会选择 (map (+) ("foo"))

2.可视化选择: v,V,

前面,我们看到了 的示例 (在Windows下应该是),我们可以使用 v 和 V。一但被选好了,你可以做下面的事:

1
2
3
J → 把所有的行连接起来(变成一行)
< 或 > → 左右缩进
= → 自动给缩进 (陈皓注:这个功能相当强大,我太喜欢了)

3.在所有被选择的行后加上点东西:

1
2
3
选中相关的行 (可使用 j 或 <C-d> 或是 /pattern 或是 % 等……)
$ 到行最后
A, 输入字符串,按 ESC。

文本编辑

插入光标位置

1
2
3
4
i → Insert 模式,按 ESC 回到 Normal 模式.
a → 在光标后插入
o → 在当前行后插入一个新行
O → 在当前行前插入一个新行

操作文本:

1.删除:字符,单词,行

x → 删当前光标所在的一个字符。
cw → 替换从光标所在位置后到一个单词结尾的字符【准确的说是删除从光标位置到一个单词结尾的字符并进入插入模式】
dd → 删除当前行,并把删除的行存到剪贴板里

通过行号确定你要删除的行;

set nu → 显示行号;
:32,65d → 32-65行就被删除了

2.拷贝:单词,行,段

  ye → 当前位置拷贝到本单词的最后一个字符。
  yy → 拷贝当前行相当于 ddP(dd删除当前行,再粘贴)
  0y$ → 拷贝当前行,即:光标移动组合操作格式:<start position><command><end position>
  y2/foo → 拷贝2个 “foo” 之间的字符串。

还有很多时候并不一定你就一定要按y才会拷贝,下面的命令也会被拷贝:

d (删除 )
v (可视化的选择)
gU (变大写)
gu (变小写)
等等

注:可视化选择是一个很有意思的命令,你可以先按v,然后移动光标,你就会看到文本被选择,然后,你可能d,也可y,也可以变大写等

3.粘帖:

1
p/P → p是表示在当前位置之后,P表示在当前位置之前