玩linux的人都知道vi,这是一个传奇的工具,所有的类Unix系统都会内建vi文本编辑器,其他的编辑器则不一定会存在。不过vi使用起来比较繁琐,功能也相对比较单一,所以目前我们使用比较多的是它的进阶版——vim编辑器。这篇文章就是对vim进行全方位的介绍,包括理论、实践各个方面各个维度,而且会加入我自己在实际操作中的一些心得总结,最关键的是会不断的完善和补充,希望本文真能如标题所述,成为一篇引导大家从入门到入坟,从惊叹到精通的好文,也希望大家多多指导、多多交流!
如上所述,vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。
vim的设计理念是命令的组合,用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时vim与很多快捷键设置和正则表达式类似,可以辅助记忆,并且vim针对程序员做了优化。
网上随便找找,漫天的粉丝都在称赞vim的强大,我就不多说了,直接摘录了一段简书【https://www.jianshu.com/p/ca7fff98edfb】上的原文供大家参考。
编辑文本效率高。
编辑器的作用主要还是去处理文本,处理文本又有快慢之分。文本的操作主要有输入、光标移动、删除、以及复制粘贴等,同样光标的移动,vim可以比一般的编辑器快上许多,vim的复制粘贴功能也强大到足以使你想再次放弃vim的学习:D,相信我,学好vim将显著提升你编码或者编辑文本的效率。
完美配合各家编辑器以及IDE。
如果你想把vim打造成c/c++/python甚至java的IDE,完全没有问题,但是我相信你再怎么配置也不可能超越JetBrain家族的那一套。如果能够把Android Studio或者Pycharm的快捷键配合上vim的高效率编辑岂不是如虎添翼?事实证明这是可行的,ideavim对vim的支持还是很不错的,而且几乎所有的编辑器或者IDE都有vim插件,你不用担心去mac上没有你心爱的notepad++,也不用担心从android转行ios在编辑方式上的巨大改变了,学会了vim,在不同平台上,不同编辑器或者IDE里面,一个vim走天下。
远程编辑
linux系统大部分都内置了vi编辑器,这应该是为什么大多数人学习vim而不是emacs的原因吧,我想只要搞开发应该是逃不过远程访问一些日志或者修改一些配置参数什么的,这时候vi的技能就派上用场啦,如果你认为只需要知道i和:wq就ok了,那我真的也没法反驳,毕竟有段时间我就是这么干的,但我想当你真的把hjkl弄熟,顺便还能流利移动光标之后应该就不这么想了。
扩展性强,私人订制功能
vim虽然已经很强大,但是部分特殊的需求并不能尽善尽美,如果你有能力的话可以自己学习vimscript来自己写脚本,绝对地私人订制。当然,如果懒得学vimscript的话,python也是可以的,但是基本的vimscript还是要掌握的。如果你实在懒的不行了,可以去google或者github,你想到的需求没准别人已经帮你写好了插件等着你发现呢。
启动快
这是我认为作为编辑器必须具备的一个条件,像Atom启动速度就很慢,notepad++做的就不错,可惜只支持windows平台,vim的启动速度还是挺快的,用来打开修改一些配置文件以及编辑文本很高效的。另外,据说emacs启动没有vim快,哈哈。
还在等什么呢,是时候好好审视一下这么多年来形成的打字习惯了,稍微深入了解一下vim,你会发现以前的码字有多么大的提升空间。下面我将陆续跟大家分享一些vim的学习和操作技巧,希望一起学习,把vimmer的精神发扬光大,让vim成为你最后的编辑器。
很简单,直接一个命令搞定!
sudo apt-get install vim
默认情况下,系统会安装在/usr/share/vim目录下。安装好之后,使用“vim -version”命令可以查看你所安装的版本:
leon@Ubuntu:~$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 07 2019 15:35:43)
Included patches: 1-1689
Extra patches: 8.0.0056
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by pkg-vim-maintainers@lists.alioth.debian.org
vim的所有配置选项全部存放于它的配置文件【.vimrc】中。它的配置文件通常有两个,全局版本(global)和用户版本(personal)。
如果只对单次编辑启用某个配置项,可以在命令模式下,先输入一个冒号,再输入配置。举例来说,set number这个配置可以写在.vimrc里面,也可以在命令模式输入。
配置项一般都有"打开"和"关闭"两个设置。“关闭"就是在"打开"前面加上前缀"no”。
" 打开
set number
" 关闭
set nonumber
查询某个配置项是打开还是关闭,可以在命令模式下,输入该配置,并在后面加上问号。
:set number?
上面的命令会返回number或者nonumber。
如果想查看帮助,可以使用help命令。
:help number
下面就是我本文在实际使用中所总结的一些经验心得:
很简单,在vim的全局配置文件【/etc/vim/vimrc,也可以访问它的链接文件/usr/share/vim/vimrc】中,末尾处加入下面几行代码即可:
set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
set termencoding=utf-8
set fileformats=unix
set encoding=prc
待添加…
快捷键 | 功能描述 |
---|---|
vim filename | 打开或新建一个文件,并将光标置于第一行的首部 |
vim -r filename | 恢复上次 vim 打开时崩溃的文件 |
vim -R filename | 把指定的文件以只读方式放入 Vim 编辑器中 |
vim + filename | 打开文件,并将光标置于最后一行的首部 |
vi +n filename | 打开文件,并将光标置于第 n 行的首部 |
vi +/pattern filename | 打幵文件,并将光标置于第一个与 pattern 匹配的位置 |
vi -c command filename | 在对文件进行编辑前,先执行指定的命令 |
快捷键 | 功能描述 |
---|---|
h 或 向左箭头键(←) | 光标向左移动一个字符【见下说明】 |
j 或 向下箭头键(↓) | 光标向下移动一个字符【见下说明】 |
k 或 向上箭头键(↑) | 光标向上移动一个字符【见下说明】 |
l 或 向右箭头键(→) | 光标向右移动一个字符【见下说明】 |
[Ctrl] + [f] | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
[Ctrl] + [b] | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
[Ctrl] + [d] | 屏幕『向下』移动半页 |
[Ctrl] + [u] | 屏幕『向上』移动半页 |
+ | 光标移动到非空格符的下一行 |
- | 光标移动到非空格符的上一行 |
n | n表示数字,例如20。按下数字后再按空格键,光标会向右移动这一行的n个字符 |
0 | 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用) |
$ | 或功能键[End] 移动到这一行的最后面字符处(常用) |
H | 光标移动到这个屏幕的最上方那一行的第一个字符 |
M | 光标移动到这个屏幕的中央那一行的第一个字符 |
L | 光标移动到这个屏幕的最下方那一行的第一个字符 |
G | 移动到这个档案的最后一行(常用) |
nG | n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu) |
gg | 移动到这个档案的第一行,相当于 1G 啊! (常用) |
n | n 为数字。光标向下移动 n 行(常用) |
说明:如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!
从命令模式进入输入模式进行编辑,可以按下 I、i、O、o、A、a 等键来完成,使用不同的键,光标所处的位置不同,如下表所示。
快捷键 | 功能描述 |
---|---|
i | 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动 |
I | 在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令 |
o | 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本 |
O | 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本 |
a | 在当前光标所在位置之后插入随后输入的文本 |
A | 在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行 a 命令 |
快捷键 | 功能描述 |
---|---|
/abc | 从光标所在位置向前查找字符串 abc |
/^abc | 查找以 abc 为行首的行 |
/abc$ | 查找以 abc 为行尾的行 |
?abc | 从光标所在为主向后查找字符串 abc |
n | 向同一方向重复上次的查找指令 |
N | 向相反方向重复上次的查找指定 |
说明:
1、如果在文件中并没有找到所要查找的字符串,则在文件底部会出现 “Pattern not found” 提示。
2、在查找过程中需要注意的是,要查找的字符串是严格区分大小写的,如查找 “shenchao” 和 “ShenChao” 会得到不同的结果。
3、如果在字符串中出现特殊符号,则需要加上转义字符 “”。常见的特殊符号有 \、*、?、$ 等。如果出现这些字符,例如,要查找字符串 “10$”,则需要在命令模式中输入 “/10$”。
快捷键 | 功能描述 |
---|---|
r | 替换光标所在位置的字符 |
R | 从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束 |
:n1,n2s/a1/a2/g | 将文件中 n1 到 n2 行中所有 a1 都用 a2 替换 |
:g/a1/a2/g | 将文件中所有的 a1 都用 a2 替换 |
例如,要将某文件中所有的 “root” 替换为 “liudehua”,则有两种输入命令,分别为:
:1, $s/root/liudehua/g
或
:%s/root/liudehua/g
上述命令是在编辑模式下操作的,表示的是从第一行到最后一行,即全文查找 “root”,然后替换成 “liudehua”。
如果刚才的命令变成【:10,20 s/root/liudehua/g】,则只替换从第 10 行到第 20 行的 “root”。
快捷键 | 功能描述 |
---|---|
x | 删除光标所在位置的字符 |
dd | 删除光标所在行 |
ndd | 删除当前行(包括此行)后 n 行文本 |
dG | 删除光标所在行一直到文件末尾的所有内容 |
D | 删除光标位置到行尾的内容 |
:a1,a2d | 函数从 a1 行到 a2 行的文本内容 |
注意,被删除的内容并没有真正删除,都放在了剪贴板中。将光标移动到指定位置处,按下 “p” 键,就可以将刚才删除的内容又粘贴到此处。
快捷键 | 功能描述 |
---|---|
p | 将剪贴板中的内容复制到光标后 |
P | 将剪贴板中的内容复制到光标前 |
yy | 将光标所在行复制到剪贴板,此命令前可以加数字 n,可复制多行 |
yw | 将光标位置的单词复制到剪贴板 |
快捷键 | 功能描述 |
---|---|
:wq | 保存并退出 Vim 编辑器 |
:wq! | 保存并强制退出 Vim 编辑器 |
:q | 不保存就退出 Vim 编辑器 |
:q! | 不保存,且强制退出 Vim 编辑器 |
:w | 保存但是不退出 Vim 编辑器 |
:w! | 强制保存文本 |
:w | filename 另存到 filename 文件 |
x! | 保存文本,并退出 Vim 编辑器,更通用的一个 vim 命令 |
ZZ | 直接退出 Vim 编辑器 |
vim是一个非常强大的工具,强大到你不敢想象。我也只是一个刚入门的初学者,这里只是收集和总结了我自己已经了解到的一些信息和技巧,还有很多其他的部分我还没有接触到,欢迎大家留言交流,多多补充!