vim

Vim基本操作

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)跳转至行首
^ 本行第一个非空白字符
$ 行尾

行跳转

快捷键 功能
<Enter> 下一行行首
+,- 下移/上移一行
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<enter> (n为数字,<enter>为回车键)将第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行;'.'可用来表示当前行,'$'可用来表示最后一行
11. 最后

Vim的强大,就在于它种类繁多的命令;Vim的不便,也在于它种类繁多的命令。对于习惯了图形界面的人,需要记忆的命令是缺限;对于习惯了命令行的人,命令意味着快捷。萝卜白菜吧。

上面罗列的命令仅仅是vim最基本的部分,更多更强大的命令,更以参考网上的其他资料或Vim官方手册

此条目发表在  Unix-like 分类目录,贴了   标签。将 固定链接加入收藏夹。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值