vim 教程 2 文档编辑

进入 vim

使用 vim 命令进入 vim 界面

1
vim practice_1.txt

或者 vi 后进行编辑再 :w 文件名 保存

或者 vi 后进入命令行模式后输入:e 文件路径 同样可以打开相应文件。

游标移动
h 左
l 右(小写 L)
j 下
k 上
w 移动到下一个单词
b 移动到上一个单词

进入插入模式

在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入

命令 说明
i 在当前光标处进行编辑
I 在行首插入
A 在行末插入
a 在光标后插入编辑
o 在当前行后插入一个新行
O 在当前行前插入一个新行
cw 替换从光标所在位置后到一个单词结尾的字符

注意每次要先回到普通模式才能切换成以不同的方式进入插入模式

命令行模式

进入命令行模式,输入 w 回车,保存文档。

输入 :w 文件名 可以将文档另存为其他文件名或存到其它路径下

:wq 回车,保存并退出编辑

退出方式总结:
命令 说明
:q! 强制退出,不保存
:q 退出
:wq! 强制保存并退出
:w <文件路径> 另存为
:saveas 文件路径 另存为
:x 保存并退出
:wq 保存并退出

linux 的 vi 命令编辑后 wq 与 x 的区别是什么?

:wq 强制性写入文件并退出。即使文件没有被修改也强制写入,并更新文件的修改时间。
:x 写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。这两者一般情况下没什么不一样,但是在编程方面,对编辑源文件可能会产生重要影响。因为文件即使没有修改,
“:wq” 强制更新文件的修改时间,这样会让 make 编译整个项目时以为文件被修改过了,然后就得重新编译链接生成可执行文件。这可能会产生让人误解的后果,当然也产生了不必要的系统资源花销。

普通模式下输入 Shift+zz 即可保存退出 vim

删除文本

进入普通模式,使用下列命令可以进行文本快速删除:

命令 说明
x 删除游标所在的字符
X 删除游标所在前一个字符
Delete 同x
dd 删除整行
dw 删除一个单词(不适用中文)
d$ 或 D 删除至行尾
d^ 删除至行首
dG 删除到文档结尾处
d1G 删至文档首部
除此之外,你还可以在命令之前加上数字,表示一次删除多行,如:

2dd 表示一次删除 2 行

vim 重复命令

在普通模式下.(小数点)表示重复上一次的命令操作

进入普通模式输入 N<command>,N 表示重复后面的次数

在普通模式下,你还可以使用 dw 或者 daw(delete a word)删除一个单词,所以你可以很容易的联想到dnw(n替换为相应数字) 表示删除n个单词

游标的快速跳转

命令 说明
nG(n Shift+g) 游标移动到第 n 行(如果默认没有显示行号,请先进入命令模式,输入 :set nu 以显示行号)
gg 游标移动到到第一行
G(Shift+g) 到最后一行

小技巧:你在完成依次跳转后,可以使用 Ctrl+o 快速回到上一次(跳转前)光标所在位置,这个技巧很实用,比如当你在写代码时,忽然想起有个 bug,需要修改,这时候你跳过去改好了,只需要按下 Ctrl+o 就可以回到你之前的位置。vim 中会用很多类似的小技巧就等着你去发掘。

行内跳转

普通模式下使用下列命令在行内按照单词为单位进行跳转

命令 说明
w 到下一个单词的开头
e 到当前单词的结尾
b 到前一个单词的开头
ge 到前一个单词的结尾
0或^ 到行头
$ 到行尾
f<字母> 向后搜索<字母>并跳转到第一个匹配的位置(非常实用)
F<字母> 向前搜索<字母>并跳转到第一个匹配的位置
t<字母> 向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用)
T<字母> 向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用)

用 ~ 可以将游标所在字母变成大写或小写

复制及粘贴文本

普通模式中使用y复制

普通模式中,yy 复制游标所在的整行(3yy表示复制3行)
普通模式中,y^ 复制至行首,或y0。不含光标所在处字符。
普通模式中,y$ 复制至行尾。含光标所在处字符。
普通模式中,yw 复制一个单词。
普通模式中,y2w 复制两个单词。
普通模式中,yG 复制至文本末。
普通模式中,y1G 复制至文本开头。
普通模式中使用 p 粘贴

普通模式中,p(小写)代表粘贴至光标后(下)
普通模式中,P(大写)代表粘贴至光标前(上)

剪切及粘贴
其实前面讲得 dd 删除命令就是剪切,你每次 dd 删除文档内容后,便可以使用 p 来粘贴,也这一点可以让我们实现一个很爽快的功能——交换上下行:

ddp, 就这么简单,即实现了快速交换光标所在行与它下面的行.
同理3ddp 就是光标所在以下3行与它下面的行进行交换

一些操作

清除一个文件的内容 :%d

释义:
% 是匹配所有行
d 是删除的意思