vim 学习

1. 基本的编辑命令
学会使用一个编辑器呢,我们先不管它的一些高级特性,先只看最基本的,至少保证我们能够正常使用这个编辑器吧。

首先来认识vim编辑器,vim编辑器是一个模式编辑器,也就是说它可以工作在多个模式下,常见的有Normal和Insert模式,当我们打开vim编辑器之后,它最初是在Normal模式下的。

再来看我们怎么输入文本呢?在Normal模式下输入字符'i',vim由Normal模式切换到Insert模式(注在底部可以看到--INSERT--字样),切换到Insert模式之后,我们就可以输入一些文本了,例如输入下面的文本:
A very intelligent turle
Found programming UNIX a hurdle
        The system, you see,
        Ran as slow as did he,
And that's not saying much for the turtle.
好吧,输入完成之后,按下Esc按键由Inert模式回到Command模式,也就是Normal模式。

在Normal模式下,移动光标可以使用下面的一些按键:
h(left)、j(down)、k(up)、l(right)

删除字符,删除一个字符,首先将光标移动到要删除的字符上,然后按下x键就可以删除该字符。

Undo和Redo,如果前面我们多删除了字符怎么办,那么怎么撤销呢,按下u按键,将会撤销最后一次修改。那么如何Redo呢,需要按下ctrl + r按键,注意需要同u键配合,即只有先按下了u键撤销了某次修改,才能按ctrl + r按键来redo这次修改。

基本的编辑文本应该会了吧,那么如何来退出vim编辑器呢,输入ZZ按键,注意ZZ是大写的字符,ZZ的命令作用是保存退出。如果我们不想保存退出,可以输入命令:q!来退出vim编辑器,如果直接输入:q来退出,那么vim编辑器将提示一个错误,告知本次修改没有保存是不能离开vim编辑器的。

掌握了上面的一些基本命令之后,使用vim做一些简单的文本编辑应该是没有问题的,但是这只是vim很小的一部分,更多有用的命令还在后面。

本节其他有用的编辑命令。
虽然输入i命令可以由编辑Normal模式进入到Insert模式,但是注意i命令是在光标之前插入文本的,如果需要在光标之后插入文本呢,可以输入a命令,表示append。输入a命令本质上同i命令没有什么不同,只是相当于光标后移了一格的i命令。

删除整行,可以输入dd命令。

前面看了i命令和a命令,那么由Normal模式切换到Insert模式,还有一个o命令,只是o命令不管光标在何处,都会新起一行来编辑文本。

最后再给大家介绍两个有用的命令,在vim编辑器中可以输入:help命令来查看相当于vim的一个帮助文档,或者在shell下输入vimtutor来阅读另外一个vim教程,最后好是边学习边使用这些命令,这样才能提高的更快。


2. 更深入的学习
前面我们学习了光标移动使用h、j、k、l这几个命令,这里我们再来看几个移动光标命令。w、b命令以单词(word)为单位来移动光标,w是往前移动(next),b是往后移动光标(backward),这些命令之前可以跟上一个数字,表示移动几个单词,例如4b表示往后移动4个单词。

移动到行首或行尾,移动到行尾使用命令'$',移动到行首使用命令'^',0(零)也可以完成相同的动作(类似)。

显示行号,如果需要显示行号,需要使用下面的命令:
:set number
如果要取消显示行号,使用命令:set nonumber

删除文本,删除文本前面我们学了两个命令x和dd,x只能删除一个字符,而dd是删除整行,这里要学习的都是d相关的命令。
首先是dw,dw命令是删除一个单词命令,这个命令可以跟一个数字,表示删除多个单词,例如d3w、3dw命令都是一次删除3个单词。如果d同$结合,表示从当前光标开始,删除当前行的剩余所有字符。当然d命令也可以和0结合,大家可以去试一下这个命令的效果。

修改文本,同c相关的命令用来替换文本,有点类似于d命令,不能单独使用这个命令的,需要同其他命令结合使用,例如cw表示替换一个单词,其实就相当于dw + i命令。另外cc用来替换整行命令,同dd类似,c命令也可以同$、0命令结合来使用,大家多试试。

替换字符,前面c相关命令执行时候都会由Command模式切换到Insert模式,而这里的r命令则不会,例如rx命令表示当前光标所在字符替换成字符'x',并且仍处于Command模式下。


3. 单词搜索
如果要搜索一个字符串,可以使用/string命令,然后回车,然后光标自然就会跳到被搜索的字符串上,例如搜索include单词:/include。
另外需要注意的是字符.*[]^%?~$是特殊字符,如果需要搜索这些字符,需要加上反斜线'\',例如要搜索'.',则搜索命令应该这样写"/\."。

如果要搜索下一个字符串,你可以输入同样的搜索命令,但是这样稍显麻烦,可以使用n命令来替代,而大写的N是往回搜索。

高亮(highlighting)显示被搜索的字符串,使用命令:set hlsearch,如果要取消高亮显示则使用命令:set nohlsearch或者直接输入:nohlsearch命令。

另外一个对搜索有帮助的命令是:set incsearch命令,在输入字符串时会自动跳转到第一个匹配的字符串处,这个命令很有用,可以加入到.vimrc文件中。如果需要取消该功能,可以输入命令:set noincsearch。

搜索一个字符串除了使用'/'之外,还可以使用'?',使用'?'表示往上(回)搜索,输入小写的n也表示往回搜索下一个字符串,'?'和'/'他们只是搜索的方向不同而已。

正则表达式。
在搜索字符串时可以在被搜索的字符串前面加上^或在在后面加上$,分别表示在行首或行尾搜索字符串,例如在行首搜索字符串/^the,在行尾部搜索/the$,如果一行只包含单词the,也可以这样搜索/^the$,搜索空行使用/^$。

匹配任意单个字符,在搜索时,如果需要匹配任意单个字符可以使用.来代替,例如表达式c.m表示搜索的一个字符为c,第二个字符为任意字符,第三个字符为m,像computer、became都能够被搜索到。

像前面搜索特殊字符也算正则表达式的一部分。


4. 块编辑和多文件
剪切、拷贝、粘贴,当我们使用像d、x这类命令删除字符时,这些字符是被保存下来的,可以使用p(put)命令来粘贴。p命令可以使用多次,表示粘贴相同的文本多次。

编辑另一个文件,在vi编辑器中可以输入:vi file来编辑另外一个文件,前提是当前编辑的文件做了保存操作,如果需要强制打开另一个文件可以加上'!',例如:vi! file.txt。

而view命令类似于vi,但是注意,使用view打开的文件是只读的,例如:view file。

同时编辑多个文件,可以使用vim打开多个文件,例如vim one.c two.c,那么如何切换呢,首先在窗口显示的肯定是第一个被打开的文件one.c,如果要切换到two.c,输入命令:next即可。如果要回到前面的one.c,输入命令:previous。编辑多文件时可以输入一个命令:set autowrite,即自动保存命令,这样我们使用next、previous命令时自动为我们保存文本,不用手动输入w(write)命令来保存了。


5. 多窗口
使用vim打开一个文件之后,可以输入split、vsplit命令来分屏,其中split是水平分屏,vsplit是垂直分屏。
例如:


屏幕就分成了两个窗口,但是注意查看、修改的都是同一个文件。屏幕分成了多个窗口,那么如何在窗口之间切换呢,有几种方法:
1. ctrl + ww (ctrl键加上两个ww字符)
2. ctrl + w + (h、j、k、l)
3. ctrl + w + (方向箭)

关闭窗口,也有几种方法:
1. ctrl + w + c
2. ctrl + w + q
3. :q

如果需要分屏时打开一个新的文件也是可以的,输入split命令后面跟上要打开的文件名就可以了,例如:
:split two.c

控制窗口大小,ctrl+'w'+'+'来增加窗口高度,ctrl+'w'+'-'来减小窗口高度,ctrl+'w'+'='让所有窗口都相同高度。

移动窗口,移动窗口使用下面的命令:
ctrl + w + (H、J、K、L),分别表示向左移动,向下移动,向上移动,向右移动窗口。


6. 块编辑
这里会涉及到另外一个模式Visual模式,这里不做过多介绍,只是需要注意的是v、shift + v、ctrl + v这几个命令进入到Visual模式,按Esc按键退出Visual模式,关于这部分可以参考教程: http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/


7. 编程相关的命令
* 语法高亮
语法高亮可以输入命令syntax on,关闭语法高亮则是输入命令syntax off。当然这些命令都是可以写在home目录下的.vimrc文件中的,这样使用vim打开一根文件之后,这些命令就自动被执行了,不用每次都手动输入。

* 设置背景色
设置背景色使用命令set background命令,背景色可以是dark、light等,例如:
:set background=light

* 设置文件类型
如果我们编辑的c文件不是标准的后缀名,那么如何告知vim呢,使用下面的命令:
:set filetype=c

* 自动缩进
自动缩进有几种缩进方式,有cindent、smartindent、autoindent。autoindent只是沿用上一行的缩进,比如上一行缩进了一个tab键,那么输入回车后,新的一行也只缩进一个tab键宽度。而smartindent可以识别一些c语法自动增加或减少一些缩进。而最强大的当然是cindent,它可识别例如c、c++、Java等编程语言自动增加或减少缩进,命令用法如下:
:set cindent

* 设置每行字符长度
命令如下:
:set textwidth=80
命令执行之后,当输入超过80个字符时将自动换行。

好吧,先贴出我的.vimrc文件:
set hlsearch

set incsearch

syntax on

set background=light

set cindent

//2015.08.18 add
关于代码折叠,在其他编辑上可能很常见,例如notepad++,而vim也是支持的。折叠方法很多,常用的可能就语法折叠、缩进折叠等,例如设置语法折叠如下:

set foldmethod=syntax
set foldlevel=100
其中foldevel表示折叠级别,当这个值很大时表示所有的折叠都是展开的,设置在.vimrc脚本中是为了用vim打开一个文件时不折叠。

关于折叠常用的命令有:

za      打开、关闭折叠
zo      打开折叠
zc      关闭折叠
zM      关闭所有折叠
zR      打开所有折叠

注:这里的打开折叠意思是展开折叠,关闭折叠的意思是将代码折叠起来。


//2015.08.18 add
注:本小节来自vim用户手册usr_12.txt

单词替换,替换命令可以在全文中用一个单词替换另一个单词,例如:

:%s/four/4/g
'%'表示所有行都执行替换,而'g'表示行中所有的匹配点都执行替换,所以这里有两点,一是所有行,二是行中所有匹配点。

如果有这样一个单词"thirtyfour",这种情况下上面的命令会出错,这个单词会被替换成"thirty4",这可能不是我们想要的结果,这里需要用"\<"来指定匹配单词的开头,命令如下:
:%s/\<four/4/g
但是处理字符串"fourteen"还是会出错,用"\>"来解决这个问题:
:%s/\<four\>/4/g

如果想每次替换都给出提示,让用户来选择是否需要替换,可以加上一个'c'标记,例如:
:%s/\<four\>/4/gc

前面讲了一个单词替换的命令,那么这里再介绍一个很有用的命令,删除行尾多余的空格。行尾多余的空格是无用的,而且diff时很难看,那么怎么全删掉呢,使用下面的命令:
:%s/\s\+$//
命令中"\s\+$"的含义是行尾($)前的一个或多个(\+)空格(\s),而替换命令的"to"部分是空的"//",这样就会删除那些匹配的空白字符。


//2015.08.20 add
vim 配色
默认的颜色方案可能大家不喜欢,没有关系可以选择一个,例如:

:colorscheme evening
对于颜色方案可以在这里找到:/usr/share/vim/vim73/colors,当然对于你的系统可能不是这路径,配色方案都是以.vim后缀结尾的。如果系统自带的还是不满意,没有关系,vim.org上有很多配色方案,下载地址: http://www.vim.org/scripts/download_script.php?src_id=18915,你可以把其中的colors目录中的内容拷贝到系统的colors目录下,也可以拷贝到home目录下的.vim目录下,也就是~/.vim/目录下。

颜色方案倒是多了许多,但对于像我这种有选择综合症的人是个问题,到底哪种方案最好呢?这里给大家推荐两个颜色方案molokai、inkpot,这两种颜色的支持需要开启256颜色支持,把这两个都写进.vimrc中吧:
colorscheme inkpot

set t_Co=256

另外,vim中还有一个很有用的功能,那就是高亮当前行,设置命令如下:
set cursorline

再次贴出当前使用的.vimrc
set hlsearch

set incsearch

syntax on

set cindent

set background=light

set foldmethod=syntax

set foldlevel=100

colorscheme inkpot

set t_Co=256

set cursorline
效果如下:


参考教程:vimbook-OPL.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值