set tabstop=4:# tab键设置为4个空格
set number # 显示行号
set cindent # 设置c语言标准缩进方式
set shiftwidth=4 # 设置缩进为4个空格
### 2. 模式切换
- 正常模式:启动vim后默认处于正常模式,无论处于什么模式,按下 Esc 就可以切换到正常模式
- 在正常模式下可以使用 h (左移)、j (下行)、k (上行)、l (右移)来移动光标
- 插入模式:写入文本时使用
```bash
# 在正常模式下输入
i在光标之前,进入插入模式
I在本行开头,进入插入模式
a在光标之后,进入插入模式
A在本行结尾,进入插入模式
o在本行之后新增一行,并进入插入模式
O在本行之前新增一行,并进入插入模式
s删除当前字符,并进入插入模式
S删除当前行中的所有文本,并进入插入模式
-
命令模式:在正常模式中按下:(英文冒号),会进入命令模式
-
命令模式可以执行vim或插件提供的指令,如上述的 命令优化 指令可以在打开文本后进入命令模式执行,但是仅限于该文本
-
常用的命令有
:q # 退出(如果修改了文本将不能执行) :q! # 强制退出(如果修改了文本将不会保存) :wq # 保存并退出 :w # 保存不退出
-
-
可视模式:在正常模式中按下v(字符文本),V(行文本),Ctrl+q(windows下块文本), Ctrl+v(Linux下块文本),进入可视模式
vim与其他编辑器不同的是,它不但采用同时按下多个键组合快捷键,而且还通过以不用的顺序按下多个键来组合成快捷键,且按键区分大小写,以下快捷键中同时按下的用 +
连接,否则即为按顺序按下
==以下快捷键都需要在普通模式下使用==
作用 | 快捷键 |
---|---|
撤回 | u |
回退 | Ctrl+r |
整页向下翻页 | Ctrl+f (forward) |
整页向上翻页 | Ctrl+b (backward) |
向下翻半页 | Ctrl+d (down) |
向上翻半页 | Ctrl+u (up) |
光标移动 | 快捷键 |
---|---|
文本开头 | gg |
文本结尾 | G |
向左 | h |
向下 | j |
向上 | k |
向右 | l |
一行的开头 | 0(数字0) 或 ^ |
一行的结尾 | $ |
跳到指定行 | 行号G 如:33G 跳到33行 |
下一个单词开头 | w(W表示只使用空格作为分隔,w前可以加数字,表示执行多少次w) |
下一个单词结尾 | e(E同上) |
上一个单词开头 | b(B同上) |
上一个单词结尾 | ge(gE同上) |
下一行开头 | Enter |
下一个括号 | % |
向左多个字符(可跨行) | 数字Backspace(退格键) |
- 复制:y (将==可视模式==下选中的文本进行复制,下同)
- 剪切:d(不进入插入模式), c(进入插入模式)
- 粘贴:p
下面是一些常用的快捷复制方式(剪切格式与复制相同只不过把y变为d或c)
描述 | 快捷键 |
---|---|
单行复制 | yy |
复制到当前行头 | y^ |
复制到当前行尾 | y$ |
复制一个单词 | yw |
复制多个单词 | nyw 或 ywn (n为数字) |
复制至文本尾部 | yG |
复制至第n行 | ynG 或 nyG |
注:
- 在正则表达式中,^表示匹配字符串的开始位置,$表示匹配字符串的结束位置。
- 命令前面加数字表示重复的次数,加字母表示使用的缓冲区名称。如==5p==为==粘贴5次==
- 使用英文句号 ==.== 可以重复上一个命令。
当你使用剪切复制等命令时,都可以指定寄存器将剪切复制的文本存放到寄存器中
在复制或删除文本时,可以使用"register命令将文本放入指定的寄存器中。例如以下命令,将复制一行文本yy
放到寄存器a中,同时文本也会被放入未命名寄存器中。
"ayy
如果再使用相应的大写字母来指定寄存器,那么会将当前行内容追加到寄存器a中,这时该寄存器中就有了两行文本。
"Ayy
在普通模式输入冒号 :
进入命令模式,然后输入 ==registers <寄存器名称>== 可以查看指定寄存器
如果要查看所有寄存器内容,可以使用 ==registers==
==上述的 registers
可以简写为reg==
-
未命名寄存器(The Unnamed Register) 当使用y命令复制文本,或使用d、c、s、x等命令删除文本时,文本将自动被放入**""**未命名寄存器。即使你在复制或删除文本时,已经指定了寄存器(例如使用"xdd命令),这些文本也将同时被放入"x和""寄存器。
-
数字寄存器(The Numbered Registers) "0包含最近复制的文本;"1包含了最近删除或者修改的文本。区别在于:"0不断被复制的文本所覆盖;而在删除文本时,如果指定了寄存器或者文本小于一行,那么"1将不会被覆盖。数字寄存器1-9可以看作是删除历史, 你可以从中找到早先删除的文本。比如使用了三次
dd
命令,那么这三行文本被分别存放在寄存器1,2,3中,可以通过命令"1P
,"2P
,"3P
将这些文本再粘贴回来。 -
行内删除寄存器(The Small Delete Register) 当删除文本少于一行时,内容将被放入**"-**寄存器,除非指定了其它寄存器。
-
命名寄存器(The Named Registers) 当文本被放入以小写字母命名的寄存器(例如**"a**)时,该寄存器原有的内容将被覆盖;而使用以大写字母命名的寄存器(例如**"A**)时,将会把文本追加到原有内容之后。
-
只读寄存器(The Read-Only Registers) 你只能从只读寄存器中粘贴内容,而不能放入文本。**"%包含当前文件名;".包含最近插入的文本;":**包含最近执行的命令行。
-
轮换文件寄存器(The Read-Only Registers) **"#**包含当前窗口轮换文件的名字。它影响CTRL-^的工作方式。
-
表达式寄存器(The Expression Register) 可以进行表达式计算并返回结果。在常规模式下,输入**"=**,就会在Vim底部显示以“=”开始的提示行,可以在其中输入表达式并按回车键确认。随后使用命令
p
,可以将表达式的结果粘贴到文本中。例如在=
提示符后输入“5*5”并按回车,然后输入命令p,就可以将计算结果“25”插入文本中了。在插入模式下,点击Ctrl-R=快捷键,也可以进入=
提示行,输入表达式然后点击回车键,将计算结果插入到当前光标处。也就是说,不用离开插入模式,也无需额外执行粘贴命令,即可以完成表达式计算。在表达式寄存器中,不仅可以使用通常的算术运算符,还可以使用Vim特定的函数和运算符。例如通过表达式寄存器来得到环境变量的值(例如"=$HOME)。如果没有输入任何表达式而直接按回车键,那么Vim将执行最近使用过的表达式。 -
选择和拖拽寄存器(The Selection and Drop Registers) 有3个寄存器用于保存选中的文本:在Mac和Windows下,"*和"+,都用于访问系统剪切板;在Linux下,**"+用于访问系统剪切板,而"*包含选中的文本。使用
"+y
命令,可以将当前选中的文文本复制到系统剪切板中。而"+p
命令,则可以粘贴系统剪切板中的内容。==通过剪切板寄存器,能够在不同的Vim编辑器或者是其他应用程序之间,进行文本交换==。"~**包含上次从其它应用程序拖拽到Gvim中的文本。 -
黑洞寄存器(The Black Hole Register) 任何放入**"_**中的文本都将不复存在。如果想要永久删除某些文本而不将其放入任何寄存器,那么可以使用黑洞寄存器。例如:命令dd将删除一行文本并将其放入寄存器"1中;而命令
"_dd
则将该行文本放入黑洞寄存器中,这些文本也就永久消失了,而寄存器"1中的文本会保持不变。 -
搜索模式寄存器(Search Pattern Register) 当通过
/
命令进行搜索时,所使用的模式将被自动放入**"/**寄存器。
==较为常用的就是"+
或"*
系统寄存器==
命令:put会将寄存中的内容粘贴到指定的文本行后面。使用以下命令,可以将寄存器中的内容粘贴到第五行的后面:
:5put a
如果要将文本放在这一行的前面,可以用以下命令:
:5put! a
你也可以使用p命令,将x寄存中的文本粘贴到光标之后:
"xp
而P命令,则将x寄存中的文本粘贴到光标之前:
"xP
如果直接使用p或P命令,而没有指明特定寄存器,那么将粘贴未命名寄存器中的内容。
使用以下命令,可以粘贴上次插入的文本,方便你录入重复的内容:
".P
如果要粘贴系统剪切板中的内容,在插入模式下可以利用快捷键Shift+Ins,而在普通模式下,可以使用以下命令:
"*p
"+p
在插入模式下,点击CTRL+R然后输入寄存器的标识符,可以粘贴相应寄存器中的内容到当前位置。例如:
CTRL+R: 将粘贴最近执行的命令;
CTRL+R/ 将粘贴最近使用的搜索模式;
CTRL+R0 将粘贴"0寄存器的内容;
CTRL+Ra 将粘贴"a寄存器的内容。