一、打开文件

①打开单个文件

vim file

②同时打开多个文件(切换文件ctrl+ww)

  1. vim -o filename1 filename2 … 水平分割窗口
  2. vim -O filename1 filename2 … 垂直分割窗口
  • 对于垂直并排的文件:使用ctrl+w+上、下方向,表示上、下切换文件;
  • 对于水平并排的文件:使用Ctrl+w+左、右方向,表示左、右切换文件;

退出文件的话可以使用q、q!、wq或者ZZ(shift+z+z)。

但是如果同时打开三四个文件,这样子却不得不退出三四次才行。太麻烦….

办法是有的!!!

只需要在退出命令的后边加上小写的a,则表示退出动作是针对所有的(ALL):qa、qa!、 wqa

如果想将一个文件的内容全部复制到另一个文件中,则可以输入命令”:r被复制的文件名”,即可将导入文件的全部内容复制到当前光标所在行下面。

二、 插入命令

i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行在行下面。

三、翻屏

ctrl+f: 下翻一屏。
ctrl+b: 上翻一屏。
ctrl+d: 下翻半屏。
ctrl+u: 上翻半屏。
ctrl+e: 向下滚动一行。
ctrl+y: 向上滚动一行。
n%: 到文件n%的位置。

ctrl+y: 向上滚动一行。

n%: 到文件n%的位置。

四、基本移动

h或退格: 左移一个字符;
l或空格: 右移一个字符;
j: 下移一行;
k: 上移一行;
gj: 移动到一段内的下一行;
gk: 移动到一段内的上一行;

H: 把光标移到屏幕最顶端一行。
M: 把光标移到屏幕中间一行。
L: 把光标移到屏幕最底端一行。
gg: 到文件头部。
G: 到文件尾部。

五、标记

使用标记可以快速移动。到达标记后,可以用Ctrl+o返回原来的位置。 Ctrl+o和Ctrl+i 很像浏览器上的后退和前进。

m{a-z}: 标记光标所在位置,局部标记,只用于当前文件。
m{A-Z}: 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。
{a-z}: 移动到标记位置。 ‘{a-z}: 移动到标记行的行首。 {0-9}:回到上[2-10]次关闭vim时最后离开的位置。
:marks 显示所有标记。
:delmarks a b – 删除标记a和b。
:delmarks a c-f – 删除标记a、c、d、e、f。
:delmarks! – 删除当前缓冲区的所有标记

六、查找

/:命令从光标处开始向后寻找字符串 string。
?: 命令从光标处开始向前寻找字符串 string。

七、删除

删除文本的命令可以分为删除单个字符和删除多个字符两类。其中,删除单个字符的命令包括下面两种情况。
x 命令:删除光标处的字符。若在 x 之前加上一个数字 n,则删除从光标所在位置开始向右的 n 个字符。
X 命令:删除光标前面的字符。若在 X 之前加上一个数字 n,则删除从光标前面那个字符开始向左的 n 个字符。

删除多个字符的命令包括下面几种情况。
dd 命令:该命令删除光标所在的整行。在 dd 前可加上一个数字 n,表示删除当前行及其后 n-1 行的内容。
D 命令或 d$ 命令:两个命令功能一样,都是删除从光标所在处开始到行尾的内容。
d0 命令:该命令删除从光标前一个字符开始到行首的内容。
dw 命令:该命令删除一个单词。若光标处在某个词的中间,则从光标所在位置开始删至词尾。同 dd 命令一样,可在 dw 之前加一个数字n,表示删除 n 个指定的单词。
d( 命令:该命令删除到上一句开始的所有字符。
d) 命令:该命令删除到下一句开始的所有字符。
d} 命令:该命令删除到上一段开始的所有字符。
d{ 命令:该命令删除到下一段开始的所有字符。

以字符为单位删除
x 删除当前字符
3x 删除当前字符3次
X 删除当前字符的前一个字符。
3X 删除当前光标向前三个字符
dl 删除当前字符, dl=x
dh 删除前一个字符,X=dh
d$ 删除当前字符至行尾
d^ 删除当前字符之前至行首
daw 删除当前字符所在单词
dj 删除下一行
dk 删除上一行
dgg 删除当前行至文档首部
d1G 删除当前行至文档首部
dG 删除当前行至文档尾部
kdgg 删除当前行之前所有行(不包括当前行)
jdG 删除当前行之后所有行(不包括当前行)
10d 删除当前行开始的10行。
:1,10d 删除1-10行
:11,$d 删除11行及以后所有的行
:1,$d 删除所有行
J   删除两行之间的空行,实际上是合并两行

八、复制

yy 命令:复制光标所在的整行。在 yy 前可加一个数字 n,表示复制当前行及其后 n-1 行的内容。
Y 或 y$ 命令:两命令功能一样,都是复制从光标所在处开始到行尾的内容。
yw 命令:复制一个单词。若光标处在某个词的中间,则从光标所在位置开始复制至词尾。同 yy 命令一样,可在 yw 之前加一个数字 n,表示复制 n 个指定的单词。
y) 命令:复制到下一句幵始的所有字符。
y} 命令:复制到下一段开始的所有字符。
y 命令( 表示回车):复制包括当前行在内的两行内容。

y^ 复制至行首,或y0。不含光标所在处字符。
y$ 复制至行尾。含光标所在处字符。
y2w 复制两个单词。
yG 复制至文本末。
y1G 复制至文本开头。

九、撤销

u 命令:该命令撤销上一次所做的操作。多次使用 u 命令会一步一步依次撤销之前做过的操作(在一次切换到文本输入模式中输入的所有文本算一次操作)。
U 命令:该命令会一次性撤销自上次移动到当前行以来做过的所有操作,再使用一次 U 命令则撤销之前的 U 命令所做的操作,恢复被撤销的内容。

Ctrl + r 重做(Redo),即撤销的撤销。

十、替换命令

~ 反转游标字母大小写
r<字母> 将当前字符替换为所写字母
R<字母><字母>… 连续替换字母
cc 替换整行(就是删除当前行,并在下一行插入)
cw 替换一个单词(就是删除一个单词,就进入插入模式),前提是游标处于单词第一个字母(可用b定位)
C (大写C)替换至行尾(和D有所区别,D是删除(剪切)至行尾,C是删除至行位并进入插入模式)
:s/old/new/ 用old替换new,替换当前行的第一个匹配
:s/old/new/g 用old替换new,替换当前行的所有匹配
:%s/old/new/ 用old替换new,替换所有行的第一个匹配
:%s/old/new/g 用old替换new,替换整个文件的所有匹配
:10,20 s/^/ /g 在第10行至第20行每行前面加个空格,用于缩进。
ddp 交换光标所在行和其下紧邻的一行。
xp  交换相邻两个字母的顺序

十一、剪切粘贴

普通模式中使用p粘贴

p(小写):代表粘贴至光标后(下边,右边)
P(大写):代表粘贴至光标前(上边,左边)

dd 其实就是剪切命令,剪切当前行
ddp 剪切当前行并粘贴,可实现当前行和下一行调换位置

ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
:1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。
:1, 10 m 20 将第1-10行移动到第20行之后。

十二、注释命令

进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来,按大写字母I,再插入注释符,例如//,再按esc键就会全部注释了
取消多行注释
进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 // 需要选中2列,按字母j,或者k选中注释符号,按d键就可全部取消注释

:3,5 s/^/#/g 注释第3-5行
:3,5 s/^#//g 解除3-5行的注释

十三、区域选择

要进行区域选择,要先进入可视模式
v 以字符为单位,上下左右选择
V 以行为单位,上下选择

选择后可进行操作
d 剪切/删除
y 复制

ggVG 选择全文

十四、窗口控制

# 打开两个文件分属两个窗口

vim -o 1.txt 2.txt
# 假设现在已经打开了1.txt
:sp 2.txt 开启一个横向的窗口,编辑2.txt
:vsp 2.txt 开启一个竖向的窗口,编辑2.txt
:split 将当前窗口再复制一个窗口出来,内容同步,游标可以不同
:split 2.txt 在新窗口打开2.txt的横向窗口
# 需要注意:内容同步,但是游标位置是独立的
Ctrl-w s 将当前窗口分成水平窗口
Ctrl-w v 将当前窗口分成竖直窗口
Ctrl-w q 等同:q 结束分割出来的视窗。
Ctrl-w q! 等同:q! 结束分割出来的视窗。
Ctrl-w o 打开一个视窗并且隐藏之前的所有视窗、
# 特别说明:Ctrl w <字母> 不需要同时按
Ctrl-w h 切换到左边窗口
Ctrl-w l 切换到右边窗口
Ctrl-w j 切换到下边窗口
Ctrl-w k 切换到上边窗口

:close 关闭当前窗口
:close! 强制关闭当前窗口
:q 退出,不保存
:q! 强制退出,不保存
:x 保存退出
:wq 保存退出
:wq! 强制保存退出
ZZ 保存并退出。
:only 关闭所有窗口,只保留当前窗口(前提:其他窗口内容有改变的话都要先保存)
:only! 关闭所有窗口,只保留当前窗口
:qall 放弃所有操作并退出
:wall 保存所有,
:wqall 保存所有并退出。

十五、文档加密

vim -x file_name
然后输入密码,再确认密码
如果不修改内容也要保存。:wq,不然密码设定不会生效。