VIM文件编译器
VIM基本介绍
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。
VIM是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。
1999年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs在文本编辑方面都是非常优秀的。
Vim是从 vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。
vim的设计理念是命令的组合。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时VIM与很多快捷键设置和正则表达式类似,可以辅助记忆。并且vim针对程序员做了优化
VIM模式介绍
Vim的六种基本模式
普通模式(Normal mode) | 在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。 |
插入模式(Insert mode) | 在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。在插入模式中,可以按ESC键回到普通模式。 |
可视模式(Visual mode) | 这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。 |
选择模式(Select mode) | 这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式 |
命令行模式(Command line mode) | 在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式 |
Ex模式(Ex mode) | 这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令 |
Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数,2dd(重复dd两次),和dj的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效地进行文本编辑。
在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
vim主要使用三种模式:命令模式,插入模式,退出模式
退出模式
:wq | 退出保存 |
:q | 退出,在文件内容没有被修改时使用 |
:q! | 强制退出不保存,在改变文件后不想保存时使用 |
:wq! | 强制退出保存,对只读文件编写时使用 |
:e! | 将文档还原成最原始的状态 |
命令模式
Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数,2dd(重复dd两次),和dj的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效地进行文本编辑。
在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
vim文件一打开就进入此模式,即默认模式,在此模式中可以使用上下左右键来移动光标,也可以删除字符或删除整行,复制粘贴文件数据
插入模式
进入插入模式
i | 在当前光标处进行编辑 |
I | 在行首插入 |
A | 在行末插入 |
a | 在光标后插入编辑 |
o | 在当前行后插入一个新行 |
O | 在当前行前插入一个新行 |
cw | 替换从光标所在位置后到一个单词结尾的字符 |
s | 光标所在字符删除并播入 |
S | 光标所在行删除并播入 |
可视化模式
操作思路
要选取一段文本,首先将光标移到段首,在普通模式下按 v 进入可视模式,然后把光标移到段末。 需要注意,光标所在字符是包含在选区中的
注意要点
- 用 v 命令进入的字符可视化模式(Characterwise visual mode)。文本选择是以字符为单位的。
- 用 V 命令进入的行可视化模式(Linewise visual mode)。文本选择是以行为单位的。
- 用 ctrl-V 进入的块可视化模式(Blockwise visual mode)。可以选择一个矩形内的文本。
常用的(可视模式)命:
x或d | 剪切(即删除,同时所选的文本进入剪贴板) |
y | 复制 |
r字符 | 所有字符替换为新字符 |
I(大i) | 选中添加的区块,按大i后写入添加字符,再按Esc |
u U | 分别是所有字母变小写、变大写、反转大小写 |
“>”和“<" | 将选中字符右移或左移 shiftwidth位置 |
p 或 P | 当输入了命令以后,VIM 将回到普通模式,这时可以按 p 或 P 进行粘贴。 |
J | 命令可以将高亮显示的文本内容合并为一行,同时以空格来分隔各行。 |
gJ | 如果不希望在行间插入空格,那么可以使用 gJ 命令。 |
g? | 可以使用rot 13算法来加密高亮显示的文本。针对同一个文本再次执行加密命令,就可以进行文本解密。 |
: | 可以对选定范围进行操作。例如:我们先在可视化模式下选中文本,然后执行 :write block.txt 命令,就可以将文本块写入另一文件中。选择多行,然后执行 :sort 命令,则可以对选中的文本进行排序。 |
命令模式下字符增删改查
字符搜索
/关键字 | 搜索关键字 |
n | 向下匹配 |
N | 向上匹配 |
gg | 跳转到第一行 |
G | 跳转到最后一行 |
ngg / nG | 跳转到最后一行 |
Ctrl+f | 向下翻页 |
Ctrl+b | 向上翻页 |
h | 光标左移 |
j | 光标下移 |
k | 光标上移 |
l | 光标右移 |
w | 移到下一个单词的开头 |
W | 移到下一个单词的开头,忽略标点 |
b | 移到上一个单词的开头 |
B | 移到上一个单词的开头,忽略标点 |
e | 移到下一个单词的末尾 |
E | 移到下一个单词的末尾,忽略标点 |
nw/nW/nb/nB | 跳转n个单词 |
L | 移到当前屏幕最后一行 |
M | 移到当前屏幕中间行 |
$ | 到当前行最后一个字符 |
^ | 到当前行第一个字符 |
0 | 到当前行第一个字符 |
复制字符
yl | 复制一个字母 |
y3l | 复制3个字母 |
yw | 复制1个单词 |
y3w | 复制3个单词 |
yy | 复制1行 |
y3y | 复制3行 |
p | 粘贴 |
u | 恢复 |
ctrl+r | 撤销恢复 |
删除字符
dl | 删除1个字母 |
d3l | 删除3个字母 |
dw | 删除1个单词 |
d3w | 删除3个单词 |
dd | 删除1行 |
d3d | 删除3行 |
dG | 从当前行删除到最后一行 |
dgg | 从当前行删除到第一行 |
x | 删除当前字符 |
nx | 删除当前向后n个字符 |
X | 删除光标前的字符 |
nx | 删除当前向前n个字符 |
cl | 剪切1个字母 |
c3l | 剪切3个字母 |
cw | 剪切 1个单词 |
c3w | 剪切3个单词 |
cc | 剪切1行 |
c3c | 剪切3行 |
p | 粘贴 |
u | 恢复 |
ctrl+r | 撤销恢复 |
替换字符
:%s/ | 要替换的字符/替换成的字符/g |
:%s/:/@/g | 替换全文的:为@ |
%1,5s/:/@/g | 替换1-5行的:为@ |
% s | 标示所有的行 |
g | 标示所有的列 |
/text | 向后查找text字符 |
?text | 向前查找text字符 |
其他字符
J | 将下一行连接到本行末尾 |
nJ | 将下n行连接到本行末尾 |
~ | 将当前字符切换大小写 |
n~ | 将当前向后n个字符切换大小写 |
~ | 将当前字符切换大小写 |
g~~ | 切换当前行大小写 |
u | 列编辑模式下,选中列转换成小写 |
U | 列编辑模式下,选中列转换成大写 |
guu | 当前行转换成小写 |
gUU | 当前行转换成大写 |
guw | 当前单词转换成小写 |
gUw | 当前单词转换成大写 |
VIM的其他操作
set调整参数
:set nu | 在每一行前显示行号 |
:set nonu | 取消行号显示 |
:set mouse=a | 显示鼠标 |
:set cursorline | 显示行线 |
:set nu | 在每一行前显示行号 |
:set ic | 查找时忽略大小写 |
:set noic | 查找时对大小写敏感 |
:set nonu 取消行号显示
:set mouse=a 显示鼠标
注意:在vim程序中设定vim的工作方式时临时的,在vim关闭后会还原,如果要永久保存vim的工作方式则需要编辑vim的配置文件:/etc/vimrc
vim的分屏功能
ctrl+w s | 上下分屏 |
ctrl+w v | 左右分屏 |
ctrl+w c | 关闭光标所在屏幕 |
在命令模式下光标的移动
:gg | 光标移动到文件的第一行 |
:G | 光标移动到文件的最后 |
:n | 数字光标移动到到指定的行 |