1. Vim的几种模式
Vim提供了诸多模式可供使用,不同模式带有不同的命令功能。
- 普通模式 启动后的默认模式。普通模式下,用户的按键被解释为各种Vim内置命令(如移动光标,删除/查找/替换文字等)。Vim强大的功能大部分即来自普通模式。在普通模式下,按键'a'或'i等即可切换至插入模式。在其他模式下,按键'ESC'即可切换到普通模式。
- 插入模式 插入模式,可以理解成编辑模式。在此模式下,用户的大部分按键操作都会被写入到文本缓冲区中,从而影响到正在编辑的文本(在执行写操作前,这些更改只限于对缓冲区中内容,并未写入到磁盘文件中)。
- 可视模式 类似于普通模式,但光标的移动操作会选中光标所经过的文本内容并高亮显示。执行非移动命令时,命令仅执行于高亮选中部分。命令模式下,按键'v'即切换至可视模式。
- 其他模式
- 命令行模式 执行Vim内置命令或调用外部程序。普通模式下,输入字符':'进入命令模式;ESC键返回普通模式,或命令执行完成后自动返回普通模式。
- 替换模式 相当于普通编辑器的覆盖编辑模式。普通模式下,输入字符'R'进入命令模式;ESC键返回普通模式。
- 块选择模式 普通模式下,与可视模式相似,但选择范围为块而非以行为单位。输入ctrl-v进入;ESC键返加。
- ...
2. 进入Vim
通过命令行启动Vim时,可以指定待编辑文件名,并通过附加选项指定文件打开后光标所在位置。
快捷键 | 功能 |
---|
vim filename | 打开文件,如文件不存在则创建 |
vim +n filename | 打开文件,并将光标置于第n行行首 |
vim + filename | 打开文件,并将光标置于最后一行行首 |
3. 文件操作
在Vim命令模式(行)中,可以通过快捷命令进入打开文件/文件保存/退出等操作。
快捷键 | 功能 |
---|
:e filename | 使用新创建缓冲区打开文件filename |
:w | 保存文件,如文件为只读,提示失败 |
:w! | 强制保存文件,即使文件为只读(是否成功取决于用户对文件权限) |
:w filename | 将当前缓冲区内容保存为文件filename |
:n1, n2, filename | 将n1到n2行内容保存为文件filename |
:q | 退出当前窗口。如文件内容已改动提示失败 |
:q! | 退出,即使文件内容已改动 |
:wq | 保存后退出 |
:x | 保存后退出 |
:r filename | 将filename内容读取到当前光标位置 |
ZZ | 退出。如有未保存内容,保存后退出 |
为了防止因程序异常中断而导致正在编辑的内容丢失,Vim打开文件后会自动创建一个.[yourfilename].swp的临时文件用于临时存放正在编辑的内容。如程序异常中止,下一次启动vim编辑文件时,vim会提示发现临时文件,询问用户如何处理,中断当前操作(Abort), 使用临时文件恢复(Recover),删除临时文件(Delete)等。
4. 多文件编辑
Vim支持同时对多个文件进行编辑。
普通多文件编辑: vim filename1 filename2 同时打开两个文件
快捷键 | 功能 |
---|
:bn | 跳转至下一缓冲区(文件)(最后一个->第一个) |
:bN | 跳转到上一缓冲区(文件)(第一个->最后一个) |
:bd | 关闭当前缓冲区(文件) |
:n,:N | 跳转至下一文件,如当前文件为最后一个,提示错误 |
:N | 跳转至上一文件,如当前文件为第一个,提示错误 |
:next, :previous | 跳转至下/上一文件 |
:wnext, :wprevious | 保存当前文件并跳转至下/上一文件 |
:last, :first | 跳转至最后一个/第一个文件 |
:files | 列出当前已打开文件 |
:args | 给出进入vim时命令行参数;当前正在编辑文件名用"[]"列出 |
使用分割窗口编辑多文件
快捷键 | 功能 |
---|
ctrl-w s | 水平分割窗口 |
ctrl-w v | 垂直分割窗口 |
ctrl-w w | 切换至另一窗口 |
ctrl-w ← | 切换至左侧窗口 |
ctrl-w ↑ | 切换至上方窗口 |
ctrl-w → | 切换至右侧窗口 |
ctrl-w ↓ | 切换至下方窗口 |
ctrl-w q | 退出当前窗口 |
:sp filename | 分割窗口并打开文件filename |
标签式式多文件编辑: vim -p filename1 filename2 同时打开两个文件
快捷键 | 功能 |
---|
:tabnew | 创建新标签 |
gt,:tabn | 切换至下一个标签 |
gT;tabp | 切换至上一个标签 |
:tabc | 关闭当前标签 |
:tabr | 切换至第一个标签 |
:tabl | 切换至最后一个标签 |
:tabm n | n为数字,切换至第n个标签。默认标签编号从0开始 |
:tabe filename | 在当前标签后打开新标签,并加载文件filename |
5. 光标移动命令
在普通模式下,除键盘上的方向键外,Vim还通过众多快捷键提供了种类繁多的光标移动命令。
基本跳转
快捷键 | 功能 |
---|
h,j,k,l | ←,↓,↑,→ |
space,backspace | (空格键,回退键)向后一位/向前一位 |
0 | (数字0)跳转至行首 |
^ | 本行第一个非空白字符 |
$ | 行尾 |
行跳转
快捷键 | 功能 |
---|
| 下一行行首 |
+,- | 下移/上移一行 |
n+,n- | (n为数字)下移/上移n行 |
G | 最后一行第一个非空字符 |
nG | (n为数字)第n行第一个非空字符 |
gg | 第一行第一个非空字符 |
`. | 跳转至上一次修改处 |
`" | 跳转至上一次离开文件时光标所在处 |
句/段/块跳转
快捷键 | 功能 |
---|
% | 如当前光标处为括号,跳转到匹配处 |
),( | 下一句/上一句句首 |
},{ | 下一段/上一段段首 |
单词跳转
快捷键 | 功能 |
---|
w | 下一单词/标点处 |
W | 下一单词处 |
e | 单词词尾/标点 |
E | 单词词尾 |
b | 上一单词词首/标点 |
B | 上一单词词首处 |
* | 读取光标所在处单词并跳转至此单词的下一位置 |
# | 读取光标所在处单词并跳转至此单词的上一位置 |
书签跳转
快捷键 | 功能 |
---|
ma | (a为任意字母)标记当前位置为书签a |
`a | (a为任意字母)跳转至书签a处 |
滚屏操作
快捷键 | 功能 |
---|
ctrl-f,ctrl-b | 向下一页/屏(PageDown),向上一页/屏(PageUp) |
ctrl-d,ctrl-u | 向下半页/屏, 向上半页/屏 |
H,M,L | 屏幕最上方一行/中间行/最后一行行首第一个非空字符 |
ctrl-e/ctrl-E | 向下滚屏一行,光标保持在当前行(或屏幕首行)的行首(e)/行尾(E) |
ctrl-y/ctrl-Y | 向上滚屏一行,光标保持在当前行(或屏幕未行)的行首(y)/行尾(Y) |
nz | (n为数字,为回车键)将第n行显示在屏幕首行位置;如未指定n,则默认为当前行 |
nz. | (n为数字)将第n行显示在显屏幕中间位置;如未指定n,则默认为当前行 |
nz- | (n为数字)将第n行显示在屏幕最后一行位置;如未指定n,则默认为当前行 |
说明:
w(ord):单词,大小写的英文字母,连字符。单词的边界通常是空白符(空格/制表),标点符号,换行符等。
W(ord):广义上的单词,包括英文字母及其他可显示字符。词的边界通常是空白符,换行符等不可见字符。
6. 插入模式
从普通模式,通过i/I/a/A/o/O都可以进入插入编辑状态,不同字母进入的区别仅在于进入插入模式后的光标位置。
快捷键 | 功能 |
---|
i | 光标位置保持不变 |
I | 光标移至本行第一个非空字符处 |
a | 光标后移一位 |
A | 光标移至本行行尾 |
o | 在当前行之下创建新行并将光标移至新行行首 |
O | 在当前行之上创建新行并将光标移至新行行首 |
ESC | 返回普通模式 |
7. 普通模式下的一般编辑
普通模式下,也可以通过快捷命令完成很多编辑操作。
快捷键 | 功能 |
---|
r | 替换当前光标处的一个字符,替换完成后返回普通模式 |
R | 替换当前光标处开始的字符串,ESC键结束替换返回普通模式 |
J | 合并当前行和下一行(删除当前行结尾处换行符号) |
cc,S | 清空当前行后进入编辑模式 |
cw | 删除当前单词后进入编辑模式 |
c$,C | 删除光标至行尾处内容后进入编辑模式 |
s | 删除光标所在处字符后进入编辑模式 |
S | 删除当前行内容后进入编辑模式 |
xp | 交换光标所在处及其后位置处字符 |
u | 撤消上一次操作 |
ctrl-r | 重复上一次操作 |
. | 重复上一次命令 |
~ | 变换光标所在处字符大小 |
g~iw | 变换光标所在处单词大小写 |
gUiw | 将光标所在处单词变换为大写 |
guiw | 将光标所在处单词变换为小写 |
>> | 将当前行向右缩进一列(Tab宽度) |
<< | 减少当前行缩进(Tab宽度) |
== | 自动缩进当前行 |
8. 普通模式下的复制/粘贴/删除
Vim普通模式下支持以行/词/块/字符等作单作进行复制粘贴操作。Vim中的删除,并不会直接丢弃掉删除掉的内容,而是会将这部分内容缓存在粘贴板中,可以用在随后使用,类似于其他编辑器的剪切功能。
快捷键 | 功能 |
---|
dd | 删除当前行 |
dw | 删除单词从光标当前位置起右侧部分 |
x | 删除当前字符 |
X | 删除光标前一位字符 |
D | 删除光标位置起本行右侧部分 |
yy | 复制当前行 |
nyy | (n为数字)从当前行开始起复制n行 |
yw | 复制单词光标当前位置起右侧部分 |
y$ | 复制光标位置起至行尾部分内容 |
p | 将粘贴板中内容复制到光标之后;如果粘贴板中内容包含行,则复制至光标所在行之下 |
P | 将粘贴板中内容复制到光标之前;如果粘贴板中内容包含行,则复制至光标所在行之上 |
9. 可视模式下的一些操作
可视模式与普通模式相近,但可以方便地高度选取文件的某一部分。
普通模式下,
'v'进入可视模式;
'V'进入可视行模式,以整行为操作单位;
ctrl-v进入块可视模式,以块为操作单行;
ESC键可返回普通模式
可视模式中,内容的选取更加灵活,因此使用起来也更方便。
快捷键 | 功能 |
---|
o | 移动光标至标记区域的另一边 |
O | 移动光标至标记区域的另一端点 |
u,U | 将标记区域内容更改为小写/大写 |
aw | 标记光标所在位置处单词(以标点符号或空白符号为界) |
aW | 标记光标所在位置处单词(包含标点符号) |
ab | 标记光标所在位置处所在(圆)括号范围内容(包括括号) |
aB | 标记光标所在位置处所在(花)括号范围内容(包括括号) |
ib | 标记光标所在位置处所在(圆)括号范围内容(不包括括号) |
iB | 标记光标所在位置处所在(花)括号范围内容(不包括括号) |
> | 将选取内容右移(Tab) |
< | 将选取内容左移1Tab |
y | 复制选取内容 |
d | 删除选取内容 |
~ | 将选取内容大小写求反 |
10. 查找和替换
结合命令行模式和普通模式,可以完成各种查找和替换操作。
模式查找
快捷键 | 功能 |
---|
/pattern | (pattern为匹配模式)从光标位置向后查找 |
?pattern | (pattern为匹配模式)从光标位置向前查找 |
n | 重复上一次查找命令 |
N | 反方向执行上一次查找命令 |
行内字符查找
快捷键 | 功能 |
---|
fx,Fx | (x为任意字符)从光标所在位置起查找本行内字符x所在的下一处(f)/上一处(F)位置 |
tx | (x为任意字符)从光标所在位置起查找本行内字符x所在的下一处位置,如成功则将光标置于找到位置的上一个字符处 |
Tx | (x为任意字符)从光标所在位置起查找本行内字符x所在的上一处位置,如成功则将光标置于找到位置的下一个字符处 |
; | 重复上一次fx/FX/tx/Tx操作 |
替换操作
快捷键 | 功能 |
---|
:s/old/new | (old为欲替换的模式;new为要替换为的模式;替换第一个匹配处后结束 |
:s/old/new/g | 在本行范围中替换.g指明作用域为本行)在本行范围中替换 |
:s/old/new/gc | (c:confirm)行内替换,每处替换前需要确认 |
:%s/old/new | %表示全文范围 |
:m,ns/old/new | m/n为数字,表示替换范围为第m行到第n行;'.'可用来表示当前行,'$'可用来表示最后一行 |
以上转自
vim 光标跳转【实用】
"跳转" 包括如下的命令: "'"、"`"、"G"、"/"、"?"、"n"、"N"、"%"、"("、")"、
"[["、"]]"、"{"、"}"、":s"、":tag"、"L"、"M"、"H" 和开始编辑新文件的命令。如果
用这些命令使光标 "跳转",那么跳转之前的光标位置会被记住。除非包含该位置的行被
改变或者删除,你可以用 "''" 和 "``" 命令返回这个位置。
**
CTRL-O 转到跳转表里第 [count] 个较旧的光标位置
(不是动作命令). {Vi 无此功能}
{only 只有在编译时加入 +jumplist 特性才有效}
或 ** **
CTRL-I 转到跳转表里第 [count] 个较新的光标位置
(不是动作命令)。
在一个 || 窗口里,该命令带你到光标所在
的错误所指的位置。
{Vi 无此功能}
{only 只有在编译时加入 +jumplist 特性才有效}
** **
:ju[mps] 打出跳转表 (不是动作命令)。 {Vi 无此功能}
{only 只有在编译时加入 +jumplist 特性才有效}
**
跳转表用来记住跳转的位置。用 CTRL-O 和 CTRL-I 命令,你可以跳回到较早前的跳转位
置,然后在跳回来。这样,你就可以在这个列表上下移动。每个窗口有独立的跳转表,每
个表最多能存储 100 项。
{only 只有在编译时加入 +jumplist 特性才有效}
例如,在三个跳转命令之后你有如下的跳转表:
jump line col file/line
3 1 0 some text
2 70 0 another line
1 1154 23 end.
>
"file/line" 列显示文件名,如果是当前文件,则显示跳转所在的文本 (为了能在窗口里
显示,去掉开头的缩排空白并截断过长的行)。
你现在位于第 1167 行。如果你用 CTRL-O 命令,光标会到第 1154 行。结果如下:
jump line col file/line
2 1 0 some text
1 70 0 another line
> 0 1154 23 end.
1 1167 0 foo bar
指针会指向上一次跳转的位置。下一个 CTRL-O 命令会使用更上面的那项。而下一个
CTRL-I 命令则会使用下面的那项。如果指针在最后一项之下,那说明你还没用过 CTRL-I
或 CTRL-O 命令。此时,CTRL-O 命令会把光标位置加到跳转表里,这样你以后就可以回
到用 CTRL-O 之前的位置。在本例中,这是第 1167 行。
更多的 CTRL-O 命令会使你分别到第 70 和第 1 行。如果你用 CTRL-I,你又可以回到第
1154 和第 1167 行。 注意: "jump" 列的数字指示你用 CTRL-O 或 CTRL-I 到该位置
所需的次数。
如果你用跳转命令,当前的行号被插到跳转表的最后。如果相同的行已经在跳转表里,那
会被删除。结果是,CTRL-O 就会直接回到该行之前的位置。
如果用了 || 命令修饰符,跳转就不会被保存在跳转表里。
在 CTRL-O 命令之后,你到了第 1154 行。如果你给出另外一个跳转命令 (比如,"G"),
那么跳转表就会成为:
jump line col file/line
4 1 0 一些文字
3 70 0 另外一行
2 1167 0 foo bar
1 1154 23 end.
>
删除和插入行以后,行号会得到调整。不过,如果你不保存文件而放弃编辑,例如
":n!",该调整会失败。
如果你分割一个窗口,跳转表会复制到新的窗口里。
如果在 'viminfo' 选项里有 ' 项,跳转表会保存在 viminfo 文件里。这样,重新启动
Vim 就会恢复跳转表。
(此文从vimer转载,不过有一个地方需要说明,即其实是ctrl+X,折腾了我半天
才知道,一开始一直以为是命令。)
Vim支持的自动完成种类实际上是很多的,有大家熟知的关键字补全,也有程序开发者经常用到的全能补全。现在,我们逐一介绍。
1.关键字补全,按键是:
FORWARD:
BACKWARD:
截图如下:
2.整行补全,按键是:
截图如下:
3.文件名补全,按键是:
截图如下:
4.字典补全,按键是(杯具啊,为了这个,我把原来的C-K映射都给删掉了):
截图如下:
对于字典补全,我写了一篇专门用于补全php函数名的文章-《》
5.全能补全,按键是:
截图如下:
上面的图是调用omnicppcomplete进行类变量补全的结果,对于omnicppcomplete的使用可以参考这篇文章
OK,所有的补全都介绍完啦,希望对大家有用~~
版权所有,转载请注明出处.
原创文章,版权所有。转载请注明:转载自 [ ]
本文链接地址:
Posted in: by Dante,3,144 views Tags: , , , , ,, , , ,
阅读(3558) | 评论(0) | 转发(0) |