linux最常见常用的编辑器肯定是vi了,这个编辑器的历史可以追溯到上个世纪Unix的年代。
VIM的意思是Vi IMproved,显然,是从vi发展过来的了,所以输入方式相当的接近(并不完全一致)。这里介绍的命令是基于VIM 7.3的版本。
1. VIM的模式
VIM是分成各种各样的模式的,各有各的作用,最常见的包括:普通模式,命令模式,插入模式,可视模式等
普通模式不用介绍了,就是打开文件时的模式,可以阅读不能编辑,VIM提供了一大堆快捷键帮助你控制光标,让你可以快速的定位位置以及跳来挑去。
插入模式就是开始编辑,VIM默认你是在阅读并非是编写,你必须主动通知它你要开始输入他才会跳到编辑模式(否则哪里有那么多快捷键好使呢),这点很多习惯windows下的IDE编辑的人刚转到VIM是不习惯的,这个只能靠多使用来熟悉了。
命令模式是指在编辑器最下面一行可以输入命令,让编辑器做各种各样的事情(你甚至可以运行shell命令),切换到这个命令需要输入:,一般都是先狂按ESC键然后输入:来输入命令。
可视模式是指输入v之后进入的模式,这个可以方便的用来选中你需要的块内容。
2. 各个模式下的常用命令
2.1 普通模式
这个模式下快捷键最多了,VIM提供了相当强大的各种各样的方法让你阅读代码。
hjkl这四个是标准键,用来控制光标上下左右移动的,所有用vi的人都应该知道,如果你不习惯你应该多使用使用,没其他的方法。这里补一句,虽然网上的文章从没看到过推荐,但上下左右键本身确实也可以控制光标,如果实在不习惯,那么。。。
)移动光标到下一个句子
(移动光标到上一个句子
x 删除当前字符,可以使用数字来修饰实现多个字符删除
X 删除光标左边的一个字符
D 删除到行尾
C 修改到行尾
s 修改一个字符
S 修改一整行
dd 删除一行
cc 剪切当前行并进入插入模式
yy copy当前行
r 替换当前字符
R 进入替换模式,直到ESC结束
. 重复最后一次的修改操作
u 撤销上次操作 U 撤销本行的所有操作
CTRL_R 恢复上次操作
w 跳到下一个单词的第一个字符
b 跳到上一个单词的第一个字符
e 跳到下一个单词的最后一个字符
ge 跳到上一个单词的最后一个字符
$ 跳到行末尾
^ 跳到行头(第一个非空格字符)
0 跳到行头(第一个字符)
f? 向后搜索?字符,光标在?字符处
F? 向前搜索?字符,光标在?字符处
t? 向后搜索?字符,光标在?字符前
T? 向前搜索?字符,光标在?字符前
% 匹配括号,如果有数字,比如:50%,则意思是跳到文章的50%的地方
G 跳到文件尾,如果有数字,比如:33G,则意思是跳到33行
gg 跳到文件头
H 光标跳转到屏幕上面
M 光标跳转到屏幕中间
L 光标跳转到屏幕下面
CTRL_G 显示当前编辑信息,在ruler关闭的情况下特别有用
CTRL_U 向上翻半屏
CTRL_D 向下翻半屏
CTRL_E 向上滚动一行
CTRL_Y 向下滚动一行 (windows下不是这个意思)
CTRL_F 向上翻一屏
CTRL_B 向下翻一屏
CTRL_O 跳转到较老的一个地方
CTRL_I 跳转到较新的一个地方
zz 当前光标行移动屏幕中间
* 当前光标的字符串向下搜索,编程很有用
# 当前光标的字符串向上搜索,编程很有用
2.2 命令行模式
命令行的命令都会在最下面一行显示出来,可以输入会被解释成并执行的文本
:w 写文件
:q 退出
:ZZ 退出
:q! 强制退出,没有保存的内容将被抛弃
/ ? 搜索,其中/是向后搜索,?是向前搜索,搜索到后,n是继续搜下一个,N是搜上一个
:set 这个可以设置一系列的参数,用来实现各种各样的功能
set number/nonumber 显示/取消行号,也可以简写成set nu/nonu
set ruler/noruler 显示/取消状态显示
set hlsearch/nohlsearch 搜索内容高亮
set incsearch 递增式搜索
set showmode 显示当前所处的模式
set ignorecase/noignorecase 忽略大小写/不忽略大小写
set nowrapscan 搜索到达文件末尾后停止,不再从头搜起
set list 显示TAB键
set tabstop=4 TAB占用4个字符宽度
set expandtab 不使用TAB,使用空格代替TAB
set cinoptions=:N 使得自动缩进时swithc和case在同一列上,个人爱好,可以不设
:edit 编辑另一个文件
:next/previous 下一个/上一个文件
:first/last 第一个/最后一个文件
:args 文件列表,当前文件会有[]提示
:split 分割窗口
:close 关闭文件
2.3 可视模式
这个其实和普通模式没有太大区别,往往进入可视模式是为了选中一段区域,后续可以剪切/复制/粘贴。
进入可视模式后,操作光标时,从起始点到当前光标点的内容会被高亮显示,此时:
d:剪贴选择的内容到剪贴板。
y:拷贝选择的内容到剪贴板。
c:剪贴选择的内容到剪贴板并且进入插入模式。
o:可视模式下,o是移动到选中的另一端
选中之后的粘贴命令:
p:粘贴
P:粘贴,但贴到光标前面
需要特别指出的是CTRL_V是按块选择,可以选择一个矩形块并且矩形块内文本会高亮,粘贴也是成块的,这个功能在复制表格时非常强大
2.4 插入模式
i:在当前光标之处开始插入,当前光标处的字符会向后移动
I:在当前行首插入
a:在当前光标之后开始插入,当前光标处的字符是不移动位置的
A:在当前行尾插入
o:在当前光标的下一行创建一个新行,并进入插入模式
O:在当前光标的上一行创建一个新行,并进入插入模式
~:修改光标下字符的大小写,并移动到下一个字符。
c{motion}:删除 motion 命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
d{motion}:和上面差不多,但是不进入插入模式。
y{motion}:和上面差不多,不过是拷贝
3. 其他
VIM除了按步就班之外,还有不少方便灵活的小功能。
3.1 书签
书签可以比较方便的记录位置供日后跳转,并且在VIM中没有GUI上的显示,VIM中书签是单个小写字母a~z
ma: 标记书签a,其中a为书签的名字,可以是a~z
`a:跳转到书签
'a: 跳转到书签所在行
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。
:marks取得所有的标记
另外还有一些特殊的标记,包括:
' 跳转前的位置
" 最后编辑的位置
[ 最后修改的位置的开头
] 最后修改的位置的结尾
这样的书签只能在本文件编辑时使用,如果想在文件中标记跳转,那么需要使用大写的书签,比如mA
3.2 寄存器
很多编辑器都只提供了一个剪贴板。VIM 有很多。剪贴板在 VIM 里面被称为寄存器(Registers)
:reg 列出当前定义的所有寄存器名和内容
使用寄存器的命令为双引号 ",比如:我们要拷贝当前行到寄存器 k。你应该按 "kyy。然后可以使用命令 "kp 来粘贴寄存器 k 里面的内容到你想要的位置
3.3 录制宏
有时候,你会发现你自己在文章的每段或者每行都重复相同的一系列动作。VIM 允许你记录一个宏来完成你的特殊需要。
这个录制分成3步走:
1. "q{register}" 命令启动一次击键记录,结果保存到 {register} 指定的寄存器中。
寄存器名可以用 a 到 z 中任一个字母表示。比如 qa,将会记录并且把宏存在寄存器 a 里面。
2. 输入你的命令
3. 键入 q(后面不用跟任何字符)命令结束记录。
@register:使用存在寄存器 register 的宏。比如 @a,将会使用存在寄存器 a 里面的宏
3.4 键盘映射
映射可以使你把一系列 Vim 命令绑定为一个单键。假设你要用一个大括号将一个特定的单词括起来。例如,把 "amount" 变成 "{amount}"。用 ":map" 命令,就可以让 F5 来完成这个工作。命令如下:
:map <F5> i{<Esc>ea}<Esc>
在这个例子中,触发器是一个单键;它还可以是任何字符串。但若你使用一个已经存在的 Vim 命令,该命令将不在有效。所以你最好避免出现这种情况。
一个可用于映射的键是反斜杠。因为你很可能想定义多个映射,那就加上另一个字符。你可以映射 "\p" 为在单词两端加园括号,而映射 "\c" 为加花括号,例如:
:map \p i(<Esc>ea)<Esc>
:map \c i{<Esc>ea}<Esc>
你需要在敲入\后,立即敲入p,以便 Vim 知道它们组成一个命令。
":map" 命令(无参数)列出当前已定义的映射,至少会包括普通模式下的那些。
3.5 插件
Vim 可以通过插件增强功能。插件其实是一个当 Vim 启动的时候能被自动执行的脚本。
简单地把插件放到你 Vim 的 plugin 目录中就可以使它生效。Unix下插件目录是~/.vim/plugin/
3.6 分割窗口
这是VIM一个很强大的特性,使用起来非常非常的酷,参照文件内容编码时尤其有用
:split 分割窗口,这个是水平分割窗口的
:vsplit 分割窗口,这个是竖直分割窗口的
:close 关闭窗口
:only 仅编辑一个窗口
CTRL-W w 命令可以用于在窗口间跳转。
要扩大窗口:
CTRL-W +
要缩小窗口:
CTRL-W -
CTRL-W h 跳转到左边的窗口
CTRL-W j 跳转到下面的窗口
CTRL-W k 跳转到上面的窗口
CTRL-W l 跳转到右边的窗口
CTRL-W t 跳转到最顶上的窗口
CTRL-W b 跳转到最底下的窗口
当然,VIM还有非常丰富的内容,有很多的插件可以挑选,完成各种各样的功能,如果挑选一下使用熟练的话,编辑起来必然事半功倍。