我保证~这是你想要的vim
Posted 百迈客医学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我保证~这是你想要的vim相关的知识,希望对你有一定的参考价值。
vim命令是我们常用的Linux下的文本编辑命令,也有很多时候我们用来查看源码。也许有人会问了,vim不就是编辑文本然后保存吗,这有什么值得写的?小编本来也是这样以为的,也是在写完之后才发现,原来看似简单的东西,你不深挖汇总,永远不知道它会带给你多大的惊喜。你想感受下这种惊喜吗?那么就跟随小编往下扒拉吧!
(图片来源:
http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html)
vi和vim的区别
一直以来,小编习惯会用vi file.txt来进入一个文件进行查看或者编辑,可是也发现有的人习惯用vim file.txt,本来本着”难得糊涂“的原则(也许vi是vim的简写吧,反正没觉得有什么不一样),暗地里给自己的小聪明点赞,写两个字母简直不要太爽(是不是觉得小编是个”戏精”)。但是今天咱是来做正经事儿的,可不能再”糊涂了“,那么我们今天就先回答这样一个问题之后再向下看吧。
vi(Visual Interface,可视化接口)和vim(VI iMproved V,增强版全屏编辑器)都是Linux中的编辑器,不同的是vim 是vi的升级版本,它兼容了vi的所有指令。vi适用于文本编辑,但是vim更适用于coding。vim官网(http://www.vim.org)自己也说vim 是一个程序开发工具而不是文字处理软件。vim有vi没有的一些特性,例如:vi中按u只能撤销上一次命令,而在vim中则可无限制撤销;vi只能在unix运行,而vim还可在windows,mac等操作平台运行;vim还可以用不同颜色加亮你的代码,vi则不能(本文最后略有介绍)。
下面会详细介绍一下vi和vim的通用命令~~
vi/vim的三种模式
命令模式(Insert mode)
vi/vim进入一个文件之后即进入了命令模式,在该模式下的所有输入都是命令。
若文件是一个不存在的新文件(vi/vim new.txt),则在底部会提示你打开的是一个新文件,可以正常编辑保存。
插入模式(Command mode)
在命令模式下按字母i/a/o都可以切换到插入模式(不要以为只有i才是插入哦),在该模式下可以进行文本编辑。
按ESC回到命令模式。
底行模式(Last line mode)
在命令模式下按:可以切换到底行模式,即可以在最底部的一行输入命令。
按ESC回到命令模式。
常用的vi/vim命令
大家已经了解vi/vim的三种模式了,下面我们就介绍一下我们常用的vi/vim命令。在阅读下面内容的时候一定要谨记命令是在什么模式下执行的哦,这样才容易理解。以下带”:”表示是在底行模式下,否则在命令模式下,输入命令后,按Enter键执行命令。
文件编辑完毕后需要保存文件该怎么操作呢?
:f |
查看文件状态。在底部可以看到”文件名称 文件总行数 光标所在行占比” |
:w |
将编辑的数据写入硬盘档案中。相当于将编辑的数据存储一下 |
:w! |
强制写入。不过,到底能不能写入,还是跟对该档案的档案权限有关! |
:q |
退出vi。若没有编辑文件,执行命令后会直接退出;反之,执行后会提示”已修改尚未保存”,可用!强制执行。 |
:q! |
不保存强制退出。只要你有从头开始的勇气,这个命令你随便用! |
:wq |
保存后退出。:x也有相同功能;快捷键shift+ZZ(大写)。若文件没有编辑,wq为不存储离开,否则保存后离开。总而言之,打开文件离开的时候,只要你对自己期间的这波操作没有意见的话,你都可以用这个命令,特别省心! |
:w filename |
文件另存为filename。简直十分便捷有木有,一边编辑一边备份不要太爽哦! |
:r filename |
读入另一个文件中的数据,然后加到光标所在行的下一行。合并文件呢! |
:n1,n2 w filename |
将n1行到n2行的内容另存到filename中 |
怎么显示行号?
:set nu |
即set number,显示行号 |
:set nonu |
即set nonumber,不显示行号 |
按i/a/o可以从命令模式切换到输入模式进行编辑,不同命令决定开始时光标的位置
i |
从光标所在位置开始输入。 |
I |
从光标所在行的第一个非空格字符处开始输入。如果某行开头就有很多字符,再也不用一个一个移动过去啦,非常有用。 |
a |
从光标所在字符的下一个字符处开始输入 |
A |
从光标所在行的最后一个字符处开始输入。当然可以先i,再按End,随你高兴。 |
o |
在光标所在行的下一行开始输入新行 |
O |
在光标所在行的上一行开始输入新行 |
r |
只会取代光标所在的那一个字符一次 |
R |
会一直取代光标所在的文字,直到按下 ESC为止 |
你是否曾经烦恼自己只能让光标一下一下动,是否曾经懊恼为什么我不能让光标指哪打哪?现在小编就来做个知识的搬运工,让光标为你所用。
h(←) |
光标向左移动一个字符(向左箭头键) |
j(↓) |
光标向下移动一个字符(向下箭头键),或者数字+Enter键(常用) |
k(↑) |
光标向上移动一个字符(向上箭头键) |
l(→) |
光标向右移动一个字符(向右箭头键),或者数字+Space键(常用) |
0 |
光标移动到本行开头,相当于按Home键 |
$ |
光标移动到本行末尾,相当于按End键 |
w |
可跳到下个单词的首 |
e |
可跳到单词尾 |
有人说了,移动一个字符用键盘上的箭头键就好了,字母还要记住每个字母对应哪个方向,这块好鸡肋。鸡不鸡肋先听小编告诉你一个小秘密:仔细观察你的键盘,你是不是发现hjkl是排列在一起的呢?h在左就向左移,l在右向右移,只需要记住J是向下,那么k就是向上了,这样记忆是不是很好记?另外你还可以在字母前加上数字,这样就可以移动几个字符,比如说10h是向左移动10个字符,15l是向右移动15个字符,20j是向下移动20行,25k是向上移动25行。
你还可以像word中一样翻页:
Ctrl+f |
向下翻页,相当于 [Page Down]按键 (常用) |
Ctrl+b |
向上翻页,相当于 [Page Up]按键 (常用) |
Ctrl+d |
向下翻半页(记忆ctrl+down) |
Ctrl+u |
向上翻半页(记忆ctrl+up) |
你也可以以一个屏幕为单位操作光标:
H |
光标移动到这个屏幕的最上方那一行的第一个字符(记忆Highest) |
L |
光标移动到这个屏幕的中央那一行的第一个字符(记忆Lowest) |
M |
光标移动到这个屏幕的最下方那一行的第一个字符(记忆Middle) |
G |
移动到这个档案的最后一行(常用) |
nG |
移动到本文档的第n行。例如20G则会移动到这个档案的第20行(可配合:set nu)。:n也可以 |
gg |
移动到这个档案的第一行,相当于 1G (常用) |
看到这里,你是不是发现了一个很优秀的命令:nG?简直不能太优秀了哇!
寻找某个字符串/批量替换修改?小编想你也是需要的
/string |
光标之下寻找某个字符串 |
?string |
光标之上寻找某个字符串 |
n |
重复前一个搜索动作,向下寻找 |
N |
重复前一个搜索动作,向上寻找 |
:s/string1/string2/ |
替换光标所在行 |
:1,.s/string1/string2/g |
第1行到当前行,将所有string1替换成string2,”.”表示当前行,g表示一直替换,不加g表示只替换遇到的第一个。 |
:1:$s/string1/string2/g |
第1行到末尾行,将所有word1替换成word2;等同于%s/string1/string2/g,%是全局的意思 |
:1:$s/string1/string2/gc |
第1行到末尾行,将所有string1替换成string2,替换前确认是否替换 |
:1:$s/string1/ &/gc |
全局替换,&表示要替换的字符,即string1。意思是将所有string1替换成换行符后加word1;等同于%s/string1/ &/gc |
:n1,n2s/string1/string2/g |
第n1行到第n2行,将所有string1替换成string2 |
cc |
替换当前行 |
C/c$ |
替换当前行中从光标处到行末的全部字符 |
cw |
替换当前行中从光标处到行末的全部字符 |
ce |
替换当前行中从光标处到行末的全部字符 |
cb |
替换当前行中从光标处到行末的全部字符 |
后5个替换命令并没有给出要替换的内容,所以实际操作的时候是先删除同时进入插入模式,然后手动输入替换内容。 |
删除命令
x |
向后删除一个字符,相当于delete键;nx向后删除n个字符 |
X |
向前删除一个字符,相当于backspace键;nX向前删除n个字符 |
D |
删除当前行光标后的所有字符 |
dd |
删除光标所在整行;ndd删除光标所在行加向下的共n行 |
d1G/dG |
删除光标所在行到第一行的所有数据/删除光标所在行到最后一行的所有数据 |
d0/d$ |
删除光标所在字符到本行首字符的数据/删除光标所在字符到本行末尾字符的数据 |
复制与粘贴命令
yy |
复制光标所在整行;nyy复制光标所在行加向下的共n行 |
y1G/yG |
复制光标所在到第一行的所有数据/复制光标所在到最后一行的所有数据 |
y0/y$ |
复制光标所在字符到本行首字符的数据/复制光标所在字符到本行末尾字符的数据 |
p |
将复制的数据粘贴到光标下一行 |
P |
将复制的数据粘贴到光标上一行 |
J |
将光标所在行与下一行结合成一行 |
有没有发现删除和复制命令的相似之处呢?赶紧找到记忆的窍门吧!
还原与重做命令
u |
复原上一个动作 |
Ctrl+r |
重做上一个动作 |
是不是贼喜欢windows编辑下的撤销与重做命令?vi/vim也有哦,记得要用呀!
vi/vim显示/编辑多个文件
命令:vim file1 file2 file3 ...[多个文件] |
|
在底行模式下, |
|
:next 切换到下一个文件;或者bn |
:prev 切换到上一个文件;或者bp |
:first 切换到第一个文件 |
:last 切换到最后一个文件 |
:q 退出当前文件 |
:qa 退出所有文件 |
注意:使用qa的时候若不能顺利退出,可以选择一个文件一个文件退出 |
命令:vim -o file1 file2 file3 ...[多个文件] 水平显示多个文件 |
命令:vim -O file1 file2 file3 ...[多个文件] 垂直显示多个文件 |
分屏显示一个文件
命令:vim file |
先执行Ctrl w再按s :水平拆分窗口 |
先执行Ctrl w再按v :垂直拆分窗口 |
可多次切割显示 窗口间切换命令是先执行Ctrl w,再按箭头键或者hjkl 退出当前用:q,退出所有用:qa 记忆:Ctrl w 表明是在windows模式下,s是standard的缩写,v是vertical的缩写。同一个文件中,前后核查比对的时候这个很好用哦! |
设置专属vi/vim
是不是厌倦了一成不变的黑底白字或者白底黑字(注意高亮功能只在vim中)还看不到文件中的分隔符?vi/vim又来了!
首先拷贝全局vim配置文件到自己的目录下,命令是cp /etc/vimrc ~/.vimrc。将对应功能的命令直接粘贴到~/.vimrc中保存即可。比如说set nu(永久显示行号),syntax on(语法高亮显示),set autoindent(自动缩进),set nowrap(不自动换行)等。
vi/vim有很多很多命令,常用的就这么多啦!另外相同的目的有多种实现方式,这里有这么多,总有一款适合你!
以上是关于我保证~这是你想要的vim的主要内容,如果未能解决你的问题,请参考以下文章