--工欲善其事,必先利其器
vim就是vi improved。vi是原本是类Unix系统上的一款优秀的文本编辑器。现在最好用的我觉是gvim,已经可能在各种平台上使用。
vim的官网是:http://www.vim.org 里面的有gvim的程序免费下载,还有各种插件供选择使用,也有少量关于vim的免费书籍供下载。
vim不同于记事本(notepad)、写字板(write)和MS office word,如果你习惯了它们,那么你再使用vim会是一件非常痛苦的事情。它是一款纯文本编译器,是现在公认的最好的文本编译器之一。
vim之所以强大就是它可以让你按照你自己的使用习惯来设置。可以这么说,你使用的越久就会越喜欢,了解的越多就会有越多的惊喜。我自己深深受益,好东西应该与大家分享,因此向大家推荐学习使用,在此向大家介绍一些非常基础的vim知识供大家学习参考。
vim有三种工作模式:插入模式 (Insert mode)、命令模式(Command mode) 、行模式 (EX Commands mode)。插入模式就像我们平时使用记事本时一样,可以随意的输入文本,基本没有什么可说的。主要是其它两个模式,下面细说。
首先是三个模式的相互转换。打开一个vim,它的默认模式是命令模式,输入a或i等字符后可以转为插入模式;插入模式在输入Esc后可以返回命令模式;命令模式输入:可以转为行模式;行模式也是在输入Esc后可以返回命令模式。注意:行模式和插入模式是不能直接相互转换的,必须能过命令模式转换。(下面的命令如果是以冒号开头的就是默认是行模式命令,否则是命令模式命令)
hjkl四个键相当于←↓↑→,可以在命令模式下使用它们来上下左右移动光标。(特别注意不要再使用小键盘的上下左右来移动光标了,不然就失去使用vim的主要原因之一了,这是刚使用vim时最不容易改变的习惯)
w是跳到下一个单词的开头
:w是保存文件
:wq是保存并退出文件
b是跳到单词的开头
e是跳到单词的结尾
[[或gg是跳到文件的第一行
]]或G是跳到文件的最后一行
nG是跳到文件的第n行,其中n是一个数字
n|是跳到本行的第n个字符,其中n是一个数字
a是向光标后插入字符
A是向本行最后插入字符
i是向光标前插入字符
I是向本行开关后插入字符
s是修改光标处字符(删除当前字符再进入插入模式)
S是修改本行的字符(删除当前行再进入插入模式)
c是与别的命令结合使用的,如cw是改变从光标后的一个单词,cb是改变光标前的一个单词,依次类推:ch是必变光标前的一个字符,cj是改变光标后的一行等等。如果前面再加上一个数字,如ncw(n是一个数字)是改变光标后的n个单词,其它命令也是这样类推的,这是vim的精华所在。就像太极生两仪,两仪生四象,四象生八卦一样奇妙。而且大部的命令都可以这样组合,可以自己发现。它们有一个普遍的规律:num+order+where,如4cw(修改4个单词),4是num,c是order,w是where;再如4yj(复制了5行)也是同理
C是修改当前行当前光标字符后的内容
d与c用法完全相似,只是d是删除不是修改,所以不进入插入模式
D是删除当前行当前光标字符后的内容
r是改变当前字符为另一字符,如ra是把当前字符变为a,它不进入插入模式
R是改变光标后的字符一直到按Esc为止,它也不进入插入模式
v是选择字符命令,按v后下下左右移动光标可以先择多个字符
V是选择行,按V后上下移动光标可以先择多行
ctrl+q或ctrl+v是打开可视块进行选择,Windows下只能用ctrl+q,因为ctrl+v被系统占用
x是删除光标处的字符
X是删除光标前的字符
y是复制当前光标处的字符,如果选择多个字符后再按y是复制选择的字符
Y或yy是复制当前行的内容,如果选择多行后再Y是复制选择的行的内容
p是把剪切板中的内容粘贴的当前行的下一行
P是把剪切板中的内容粘贴的当前行的上一行
o是在当前行的下一行插入一新行
O是在当前行的上一行插入一新行
zf是在选择多行后把内容折叠起来
zo是打开当前的折叠
zc是关闭光标处打开的折叠
zn是打开所有的折叠
zm是关闭所有打开的折叠
:sp 文件名 是打开一个新的文件在水平的窗口
:vsp 文件名 是打开一个新的文件在垂直的窗口
ctrl+w按两次是在打开的窗口中顺序进行切换
ctrl+w+(hjkl中的一个)是在光标称动方向上切换窗口
ctrl+w+r和ctrl+w+R都是把当前窗口和其它窗口换位置,不同的是它们的顺序正好相反
ctrl+w+(HJKL)是把当前窗口和光标移动方向上窗口换位置(如果有的话)
0是把光标移动到行的第一个字符处
^是把光标移动到行的第一个非空白字符开始处
$是把光标移动到行的结尾处
.是重复上一个命令
fw是在本行光标后找一个字符,其中w可以是任意字符,逗号可以重复此次的搜索
Fw是在本行光标前找一个字符,其中w可以是任意字符,逗号可以重复此次的搜索
zz是把当前行放到窗口中间
zt是把当前行放到窗口第一行
zb是把当前行放到窗口最先一行
ma是把光标处标志为a,其中a可以是任意一个字母
`a是把光标移动到标志a处,其中a可以是任意一个字母
'a是把光标移动到标志a所在的那一行,其中a可以是任意一个字母
>>是把当前行向后缩进
<<是把当前行向前缩进
>是在选中多行后把这些行向后缩进
<是在选中多行后把这些行向前缩进
/word是搜索一个单词,word可以是任意字符串
?word是搜索一个单词,word可以是任意字符串,与/不同的是?的搜索方向正好与它相反
n或N是在/或?搜索的结果中进行切换,n与N不同的是方向正好相反
*或#是搜索光标处的单词,不同的是*与#的搜索方向正好相反
:bn或bp是在打开多了buffer时在buffer之间进切换换的
:args是在一行中查看打开的多个buffer
:ls是在多行中查看打开的多个buffer
:set nu是在窗口中显示行号
:set nonu是不在窗口中显示行号
:set backup是备份一个编辑的文件
:set nobackup是不备份一个编辑的文件,可以看出set设置是成对出现的有一个set a就不一个set noa与之对应。
:set tabstop=4是把一个tab键显示为4个空格,也有许多别的设置与其形式相似。
:set all可以查看所有的set设置
:%s/life/Life/g是把文件中所有的life改变为Life,其中life和Life可以是任意字符串,life还可以是一个正则表达式
:1,10s/Life/life/g与上面命令相似,只不过本命令不改变文件的全部,只改变1到10行
:pwd是显示当前vim的工作路径
:cd与操作系统下的命令相似是改变vim的工作路径
:lcd %:p:h是把本窗口的vim的工作路径改变为打开的文件的路径,不影响其它窗口的工作路径
:!ls是显示调用操作系统的命令,ls可以是任意可以执行的系统命令。也可以把vim中的一些变量传给操作系统的命令,如在Windows中可以用::!explorer %:p:h打开窗口打开的文件所在的目录
:Ex可以在vim中水平的窗口中打开的文件所在的文件夹
:Vex可以在vim中垂直的窗口中打开的文件所在的文件夹
:set mouse=a selection=exclusive selectmode=mouse,key这条命令可以让vim像notepad一样用鼠标来点哪里光标到哪里
:hi normal guibg=black guifg=white这条命令可以让你的vim界面变的比较好看些。
:map Y y$是让Y不要去复制一行,而是让它像y$一样去复制光标到行尾的内容
:map \cd :lcd %:p:h是给命令模式的\cd命令添加像行命令:lcd %:p:h的作用,把当前窗口的工作路径变为当前窗口打开的文件所在的路径。许多的自已用的快捷键都可以能过此方法定义,复杂一些的也可以定义函数来处理,需要的话查阅文档进行学习即可。
:tabnew可以打开一个新的tab
gt或gT可以在tab之间进行切换,它们的方向下好相反
:e 文件名 可以打开一个新的buffer
gf 如果方件有另外一个文件的路径这个命令在光标们于路径上时可以进入那个文件。
ctrl+o可以返回上一个打开的文件
掌握了以上的内容就可以正常的使用vim了,其它一些有用的命令大家可以自己查阅文档或书籍学习使用,但是它的作用远不止于此,还有许多的非常方便的插件,比如TagList,bufferexplorer,nerd_tree等等,大家可以自己学习使用,它们极大地方便了vim文本处理的能力。当然最强大的是vim可以配合shell或批处理或其它一些脚本进行工作了,这样vim的功能就是被无穷的放大了,这需要我们的努力去发现。
另外由于我的水平有限,加之行文匆忙,文中很可能错误不断,希望大家不要见怪,多批评指正。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步