您的位置:首页 > 运维架构 > Linux

<<鸟哥的私房菜>>--读书笔记--vim编辑器

2011-11-07 17:02 197 查看
vim(visual interface improve) 是vi的升级版本,也是linux中最常见的一种交互式文本编辑器。

1.vim的三种模式

vim有三种模式,三种模式之间的切换如下图所示:



当使用vim /path/file_name 打开一个文件后,首先见到的就是一般模式(normal),而我喜欢叫它编辑模式,因为在这个模式下,可以进行文本的复制,粘贴,删除等操作。

2.vim的常见操作
下面分别介绍一下vim各个模式的常见操作:
2.1 编辑模式(normal mode)
在编辑模式下,可以使用键盘来控制光标的移动,下面是我在工作中常用的一些按键,掌握了这些,可以大大加快你使用vim编辑的速度。

光标移动
光标以字符为单位,上下左右移动
k(↑)、j(↓)、h(←)、k(→)
光标以单词为单位,移动到下一个单词的词首w
光标以行为单位,移动到光标所在行的行首0
光标以行为单位,移动到光标所在行的行尾$
光标以屏幕为单位,向下翻一屏ctrl+f
光标以屏幕为单位,向上翻一屏ctrl+b
光标以文档为单位,移动到文档开头gg或1G
光标以文档为单位,移动到文档结尾G
在编辑模式下可以对文件进行复制,粘贴,删除操作,这也是我为什么喜欢叫这个模式为编辑模式的原因。除了x(删除)我在工作中比较常用外,复制,粘贴我更多的通过下面要介绍的visual mode来完成

复制、粘贴、删除
以行为单位,复制光标所在行yy
在光标所在行的下一行,粘贴所选择的内容p(大P正好是相反,在光标所在行的上面粘贴)
以字符为单位,删除光标所在处的一个字符
x(大X的使用效果与backspace相同)
以行为单位,删除光标所在行dd(其实这个效果更像是word里面的剪切)
在vim中也有类似word中的撤消,恢复等功能
撤消、恢复、重复
撤消上一个动作u
恢复上一个动作ctrl+r
重复上一个动作.
2.2 输入模式
那当我需要添加一些内容的时候呢,这个时候要以通过以下方式,进入输入模式。输入模式有两种一种是插入模式(insert),别一种是改写模式(replace)。改写模式我除了做实验,在生产中重来就没有用过,这边就暂时不列出来了。

进入或退出输入模式
以字符为单位,在当前光标所在处进行输入i(insert)
以字符为单位,在当前光标处退后一个字符输入a(append)
以行为单位,在当前光标所在行的行首输入I
以行为单位,在当前光标所在行的行尾输入A
在当前光标所在行的下一行,打开一个新行输入o(open)
在当前光标所在行的上一行,打开一个新行输入O
返回编辑模式Esc键
2.3 命令模式
当我要对文档内容进行一些查找,替换,保存,退出或临时更改vim的属性时,就要使用命令模式,它通常使用:(冒号) 、/(斜线)、?(问号)三种方式进入,而使用Esc键返回编辑模式。下面就介绍一些命令行模式下常用的操作:
注:以下内容中,如果是用:(冒号)进入的命令模式,那介绍时冒号我就省略了。

查找与替换
以光标所在处,向下查找字符串string/string 使用n(next)代表查找下一个,N代表查找上一个,下同。
以光标所在处,向上查找字符串string?string
使用正则表达式进行模糊匹配/pattern/
在n1~n2行之间查找,符合模式pattern的内容,并将其替换成字符串stringn1,n2s/pattern/string/g 如果不加g(global)那么默认只会替换每行查找到的第一个,符合pattern的内容
全文替换,有两种表达方式1,$s/pattern/string/g
%s/pattern/string/g
两者是等效的,随便用哪个
在替换前进行询问确认n1,n2s/pattern/string/gc
c(confirm)
保存、退出等操作
对编辑的内容进行保存w
将当前文档另存为file_namew file_name
强制保存w! 当编辑一些只读文件时,需要用到这个
退出关闭vimq
放弃所有编辑,并强制退出q!
保存编辑并退出
x
在vim中执行bash命令!command
在已经打开一个文件后,还想在当前vim中再打开其它文件r file_name
这个功能我很少用,我一般使用下面要介绍的多窗口编辑,两种方式无优劣之分,更多的是使用习惯上的区别。
命令模式中可以临时设置vim的属性,我常用的有以下以个,更多的内容可以自行查看vim的help文件或Google,如果不想每次都进行更改,可以将其写到vim的配置文件中。

临时设置vim的属性
显示或关闭行号set nu/nonu
打开或关闭搜索结果高亮显示set hlsearch/nohlsearch
打开或关闭语法着色set syntax on/off
打开vim的帮助文件help
到此vim一些常见的基础操作就介绍完了,而vim操作的一大特色就是可以进行组合操作,比如说保存退出,可以这个做:wq ;再比如,我想把1到10行全部删除,可以这样做:1,10d

3. vim的扩展操作

下面介绍两个我自己觉得比较好用的功能visual,和多窗口编辑
3.1 visual功能
当你在windows上面,习惯了使用鼠标进行选择时,一下子使用vim可能会有不习惯的地方。其实在vim中也有类似鼠标选择的功能,而且相较于windows上面常见的选择功能可能更加强大。
当你在vim的编辑模式,按下小写v时,会进入visual状态,这时移动光标,所经过的地方都会被选中。配合y(复制)、p(粘贴)、d(删除),可以很方便的实现编辑功能。下面就是一个使用visual模式进行选中的一个示例。






同样的,当你按下大写V时,就会进入visual line模式,此时光标所经过的行都会被选中。



比较特殊的是ctrl+v 后,就会进入visual block模式,他可以以一个矩形来进行选择,有点类似于列编辑,特别适用于一些排列规则的文件如,下面是我做的一个示范:
我将192选中之后,粘贴到了 主机名后面







3.2 vim的多窗口编辑
vim可以在一个窗口打开多个文件,实现对多个文件同时编辑,同时也支持多个文件之间的复制,粘贴。
打开方式
:sp filename



可以通过以下命令来实现光标在多个窗口间的之间的移动:ctrl+w+j/k



4. vim使用环境配置
4.1 vim的编码设置
vim的全局环境变量的配置文件是/etc/vimrc,但一般不建议修改这个配置文件,而是在自己用户家目录,新建.vimrc文件,在该文件中定义自己个性化的需求
当我们需要在windows与linux之间来回复制文件时,因为windows默认使用的编码规则是cp936(基本等同于GBK),而linux通常使用的是utf-8进行编码。所以常常会出现乱码的情况,为了尽量避免这种情况的发生,我们就需要对vim的默认编码环境进行设置。

在vim中与字符编码相关的有四个变量,与今天我们配置相关的,主要有两个:fileencodings和fileencoding
下面分别对这四个编码变量做个简单说明:
encoding:vim的内部使用的编码规则,vim内部所有的buffer,寄存器,脚本中的字符串等都会使用这个编码。通常我们使用的是utf-8,并且不建议去修改这个值。当一个文件的编码与encoding不一致时,vim会先将文件编码转换成内部编码,文件中含有没有办法转换成内部编码的字符时,这个字符就会丢失。

termencoding:是vim用于屏幕显示的编码,在显示的时候vim会把内部编码转换成显示编码,如果内部编码含有无法转换成屏幕编码的字符时,就会以?号显示。但不会出现字符丢失的情况。

fileencodings:是一个以逗号分隔的列表,列表的每一项就是一种编码的名称。当vim打开一个文件时,会依次用fileencodings中的编码方式进行解码,如果解码成功的话,就会用这种方式进行解码,并将fileencoding设置为这个值。如果不成功,就继续试验下一个编码方式。如果全不成功的话,默认会用最后一种解码方式对文件内容进行解码。

通常情况下,使用了错误的解码方式,就会造成乱码,为了尽量的避免这种情况发生。
推荐值为:set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

fileencoding:vim在读取文件时,会对文件内容的编码规则进行探测,当现文件编码规则与encoding不一致时,就会调用fileencodings来尝试解码。当解码成功后,会设置fileencoding的值,这个值按我的理解就是一个标识,用于文件编辑完成后存盘时使用。将内部编码转换成fileencoding标识的编码后,进行存盘。

vim是调用外部命令,iconv来实现编码之间的转换。如果你想手工转换文件的默认编码方式,也可以通过 iconv 来进行。具体的使用方法要以man一下。
另外:只有在对文件正确解码的前提之下,对文件转码才有意义。也就是说,当你已经打开了一个文件,发现文件内容是乱码,这个时候,你通过设置fileencoding这个值,是没有办法纠正乱码的。

4.2 其它境变量的设置
如上面2.3节提到的环境变量,如果你不想每次手工设置的话,也可以将其写入配置文件,永久保存。除了上面提供的,还有许多可定制的选项,建议自行通过help文件,研究一下。

5. vim的临文件

在使用vim编辑一个文件时,vim会在被编辑文件所在的目录下面,新建一个名为.file_name.swp的文件。
有时候当你打开一个文档,发现会有如下提示时
这个提示分成三部分
1.提示发现一个临时文件,以及对临时文件基本情况的一个概述
2.介绍了出现这种情况的两种原因
3.提供了一些处置选项
E325: ATTENTION
Found a swap file by the name ".vimrc.swp"
owned by: root   dated: Sun Aug  3 19:04:49 2014
file name: ~root/.vimrc
modified: no
user name: root   host name: localhost.localdomain
process ID: 4344 (still running)
While opening file ".vimrc"
dated: Sun Aug  3 12:41:39 2014

(1) Another program may be editing the same file.
If this is the case, be careful not to end up with two
different instances of the same file when making changes.
Quit, or continue with caution.

(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r .vimrc"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".vimrc.swp"
to avoid this message.

Swap file ".vimrc.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
两种情况生成的处置项菜单也是有区别的,第二种情况会多一个delete选项
对于第一种情况,有其他人或程序也在编辑同一个文件,为保持数据的一致性,最好是选择以只读方式打开,或者干脆就直接退出,等其他人使用完成后,再来编辑。
对于第二种情况,由于编辑器崩溃引起,如果你想恢复到崩溃前的状态,可以选择recover。如果你确定这个临时文件已没有用了,可以选择delete。当然你可以直接选择edit。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux vim