玩转VIM编辑器

from: http://shaoguangleo.blog.163.com/


一、玩转VIM编辑器-vim窗口管理及配色方案

水平或垂直分割窗口

l  在vim编辑文件时,可以使用:split来水平地打开本文件的另一个副本,或者使用:vsplit来垂直地打开;

l  打开另外一个文件,可以使用:split anothername或者:vsplit anothername;

l  在各个窗口中的导航方式为: CTRL+W {导航键j、k、h、l},比如输入CTRL+W j就可以跳转到该窗口的下一个窗口。

l  调整分割窗口的大小:CTRL+W (+/-),分别为增大或减小窗口的大小

l  打开文件时就设置好打开的大小,例如:25 vsplit filename将打开一个垂直为25列的新的窗口。

更改窗口标题

      可以使用下述命令来修改终端窗口的标题为My Terminal

:set title titlestring=My\ Terminal

使用命令:help titlestring可以了解到:

:set title titlestring=%<%F%=%l/%L-%P titlelen=70

其中:

? %F – 当前窗口中文件的名字

? %l – 光标所在的行数

? %L – 文件的总行数

? %p - 光标所在处于文件中的百分比。

更改vim配色方案

可以使用下述命令来查看vim编辑器支持的配色方案:

:!ls $VIMRUNTIME/colors

然后可以试用其中的配色方案,比如想使用desert.vim

:colorscheme desert

即可更改配色方案为desert。更多详细的配色方案,参考:

http://vimcolorschemetest.googlecode.com/svn/html/index-c.html

在选项卡中编辑多个文件

比如使用vim –p file1 file2 file3可以打开三个选项卡用于显示3个文件。

关于选项卡中的操作,如下示:

:tabedit FILENAME

:tabe FILENAME

在当前vim会话中在另一个选项卡中打开文件

:tabs

显示所有打开的选项卡

:tabn N

到第N个选项卡

:tabclose :tabc

关闭当前选项卡

:tabdo CMD

对所有的选项卡执行命令CMD

:tabn

跳转到下一个选项卡

:tabp

跳转到前一个选项卡





二、玩转VIM编辑器-vim附加特性

重复一个操作N次

对于我们前面介绍的一些操作,我们可以单纯地加上一个数字,来重复操作N次,比如j表示下移一行,那么10j就是下移10行。

      还有一些重复执行的命令:

重复命令

描述

@@

重复前一个执行的宏

n

向同样的方向执行搜索

N

向相反的方向执行搜索

.

重复上一次的编辑命令

@:

重复上一次的命令行操作

撤销和重复操作

单次撤销,直接使用字母u即可,如果想撤销N次操作,可以使用Nu;

撤销全部操作,使用大写字母U即可。

      如果使用了u撤销操作,并且发现错误了,可以使用:red或者CTRL+R来撤销刚才做的编辑动作。

打开光标下对应的文件

      这个特性对于下述所示的情况相当有用。

l  测试配置文件中所给的文件名是有效的;

l  编辑一个文件的时候,想查看编辑文件中所包含的文件;

l  在编辑源代码的时候,参考include或者import的文件;

1.     直接打开:    gf

2.     打开一个新的窗口: CTRL+W f

3.     打开一个新的选项卡:    CTRL+W  gf

如果文件中所包含的文件并没有给出绝对路径,那么vim将在当前目录中搜索。

      在下述情况下,即使没有指出绝对路径,vim也能定位到文件的准确位置:

1.    C程序中的头文件;

2.    Perl程序中的Perl模块

使用传统方式编辑多个文件

      使用此种方法,可以在那一个vim会话中编译多个文件。

打开方法为:vim file1 file2 file3

如果已经处在vim编辑会话中,需要再打开一个文件,可以使用下述命令:

:e anotherfile

我们可以使用:ls来列出目前vim会话中的所有文件,比如:

:ls

  1 %a   "apue.h"                       line 1

  2 #    "passwd"                       line 1

  3      "lscpu"                        line 1

那么我们可以使用:e #N来打开第N个文件;

在两个文件中切换的方法为:  CTRL+^;

在多个文件中移动的方法:

使用命令:next和:previous分别可以移动到下一个文件或者上一个文件。

自动保存文件

      如果在没有保存文件的时候,想切换到另一个编辑文件,会出现警告信息,提示先保存信息,可以设置自动保存选项:set autowrite,这样就可以直接切换各个文件或缓存。

      也可以使用:wall单个命令来写入所有的文件。

Vim中加密文件

使用:X来加密文件,下次编辑时就需要输入加密密码;

解密方法为:set key=然后保存文件就可以了。

加 密 的 局 限 性

Vim 采用的加密算法有弱点的。它对于防止那种偷窥者是绰绰有余了,但不足以防止一个手上有大量时间的密码专家。而且, 你应该知道交换文件是不加密的;所以当你在编辑文件时,拥有超级用户权限的人能够读取未经加密的文件文本。不让人们读到你的交换文件的一个方法就是不使用交换文件。

:setlocal noswapfile

由于没了交换文件,文件复原就不可能了。为了避免失去编辑的成果,要比平时更勤快地存盘你的文件。

保存和还原vim会话

      在我们编辑N个文件的时候,如果需要先做别的事情,在返回来编辑该会话,那么我们可以保存该会话,然后还原它,在这个过程中,诸如缓冲区、窗口大小、自定义选项、文件夹和当前目录等都会保存。

会话命令

描述

:mksession

在当前目录中创建一个默认的Session.vim

:mksession filename

保存会话为指定的文件名filename

$vim –S

打开当前目录中默认的会话

$vim –S filename

打开当前目录中指定的会话filename

:source Session.vim

导入会话中的所有设置

在vim中执行Unix脚本命令

      在vim中执行Unix命令cmd,使用:!cmd即可。比如显示:!date日期信息。

也可以将当前文件名作为一个参数传入到Unix命令中:

:!echo %

%代表当前文件名

:!echo %:p

%:p代表当前文件名的绝对路径

:!echo %:e

%:e代表当前文件的扩展名

使用vimdiff检查文件中的异同

      在Unix中可以使用diff file1 file2来查看两个文件的异同(完全命令终端显示),但是vimdiff更加的直观、友好(不同颜色来友好地显示出文件异同)。

vimdiff命令

描述

vimdiff file1 file2或

vim -d file1 file2

在一个垂直分割窗口中显示不同

vimdiff –o file1 file2或

vim –d -o file1 file2

在一个水平分割窗口中显示不同

vim file1

:diffsplit file2

已经打开了一个文件,在打开另一个文件来比较异同-水平分割

vim file1

:vert diffsplit file2

已经打开了一个文件,在打开另一个文件来比较异同-垂直分割

[c

跳转到下一个修改处

]c

跳转到上一个修改处

vim映射命令

      如果需要重复地执行一个命令,可以使用vim的映射命令来实现。

比如:map :write :!cc % && ./a.out该映射命令在执行:write的时候就会编译当前文件并执行。

      前面我们提到过:w 和:up的区别,可以使用map :w :up;还有:map :q :confirm q。

      使用:map可以显示所有定义的映射。

让bash shell工作的像vim编辑器

set -o vi 表示编辑命令行用 vi 模式,默认状态是 vi 的 编辑状态,可以输入、修改,用 ESC 退出编辑状态后,可以用 h,l 来前进后退, j,k 来翻看历史命令,^光标到行首,$光标至行尾,dd 删除该行...等等,和 vi 的用法是一样的。习惯用vi 的人可以用 set -o vi 这种模式加快命令行编辑。

     此外,还有 set -o emacs,表示编辑命令行用 emacs 模式,不分编辑状态和控制状态。 可以直接输入,也可以用 [CTRL]-a 至行首,[CTRL]-e 至行尾,[CTRL]-k 删除光标处到末尾...等等,这和 emacs 的编辑方式是一样的。这是默认模式,也是最常见和大多数人习惯的方式。

vim编辑器中的一些选项

选项

描述

:set nu

显示行号

:set ic

搜索时忽略大小写

:set ro

以只读模式打开

:set wm=n

最右端回卷最大值

:set ai

开启自动缩排功能

:set all

显示vim会话中的所有设置

:set list

显示所有不可视字符,比如^|表示tab,$表示行尾

:set hlsearch

高亮显示匹配模式

:set incsearch

开启增量搜索模式,实时搜索

如果想关闭上述设置,可以使用:set no<OPTION>,例如不显示行号为:set nonu。

默认寄存器和它们的用法

寄存器名称

描述

%

当前文件的名称

#

替换文件的名称

:

最近一次执行的命令

/

上一次的搜索模式

上一次使用的寄存器

      从寄存器中粘贴内容,执行下述命令

“<寄存器名称>p

比如如果“%p就会把当前文件名给粘贴到光标位置。

      关于寄存器,有以下几点需要注意:

1.    数字表示的只有从0到9的10个寄存器;

2.    最近拷贝的存储在寄存器0;

3.    最近删除的存储在寄存器1;

vim目录操作

      我们可以使用vim作为一个文件管理器在文件系统中导航,并且可以进行一些操作。

      比如使用vim /可以看到:

      在vim文件浏览器中,可以执行下述操作:

描述

<Enter>

打开光标对应的文件或文件夹

D

删除光标对应的文件

R

重命名光标对应的文件

X

执行光标对应的文件

o

打开一个水平分割窗口

      也可以在vim编辑器件中打开vim文件浏览器:

键值

描述

:Ex

在vim文件浏览器打开当前目录

:Ex /etc

在vim文件浏览器打开指定目录

:Sex

在vim文件浏览器使用水平分割窗口打开当前目录

:Vex

在vim文件浏览器使用垂直分割窗口打开当前目录

:Tex

在vim文件浏览器在一个新的选项卡中打开当前目录




三、玩转VIM编辑器-强力搜索

搜索导航

导航键

描述

/

向前搜索,前向

?

向后搜索,反向

 

 

n

跳转到下一个搜索词所在位置

N

跳转到前一个搜索词所在位置

//或??

重复前面的搜索或反向搜索

跳转到下一个/上一个当前光标所在的字符

      使用该技巧可以不用使用/pattern可以直接跳转到光标所在的字符。

导航键

描述

*

跳转到光标所在字符的下一个匹配处

#

跳转到光标所在字符的上一个匹配处

上面的搜索方式是精确匹配的,比如光标在字符hell上,就不会搜索到hello上,但是我们可以使用下面描述的可以使得光标在hell上时,也能搜索到hello或者shell等包含hell的单次。

导航键

描述

g*

跳转到下一个局部匹配的单词处

g#

跳转到上一个局部匹配的单词处

PS:可以使用[I来列出所有符号光标处单次的行。

在一行中搜索字符

导航键

描述

fX

在一行中向前搜索字符X并跳转

FX

在一行中向后搜索字符X并跳转

tX

在一行中向前搜索字符X并跳转到X前面一个字符

TX

*****没有测试出来

;

向前重复上述操作

,

向后重复上述操作

12个实用的强力搜索和替换实例

Vim编辑器中文本替换命令的语法为:

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

其中有3个可能的flags,分别为:

?    [c]每次替换都确定一下

?    [g]替换当前行中所有符合的

?    [i] 忽略模式匹配的大小写

1替换整个文件中所有符合模式的文本

:%s/old-text/new-text/g

其中%s指定了所有的行,而其中%的含义为替换整个文件;

其中g的含义为指定行中所有的匹配项,如果没有g将只是替换行中发现的第一个。

2在一行中替换文本

:s/old-text/new-text/gi

上述命令中没有指定range范围,将默认为当前行。

3在指定行中替换文本

:1,10s/I/We/g

上述命令将把从第1行到第10行的I替换为We。

4在指定块中替换文本

在使用CTRL+V时,可以替换选定的文本,在输入:时,就会自动变为:’<,’>,这是就可以输入命令了:

:'<,'>s/helo/hello/g

该命令将把指定块中的helo替换为hello。

5在接下来的N行中替换文本

:s/helo/hello/g N

该命令将替换从当前行开始的共N行。

6只替换整个单词而不是部分匹配

标准替换:

原始文本: This is his idea

:s/his/her/g

替换文本:Ther is her idea

 

完整单词替换:

原始文本: This is his idea

:s/\<his\>/her/

替换文本: This is her idea

 

      所以,如果需要完整替换,需要在关键词前后添加<>,对于一些新手而言,可能会希望使用空格来代替,殊不知,这样可能会导致开始和结束的字符不符合条件。

7使用正则表达式来替换多个文本

原始文本: Linux is good. Life is nice.

:%s/\(good\|nice\)/awesome/g

替换文本: Linux is awesome. Life is awesome.

8交互式地查找替换

可以在命令行中使用c-flag来交互式地查找替换,比如

:%s/awesome/wonderful/gc

将会提示如下信息:

replace with wonderful (y/n/a/q/l/^E/^Y)?

?    y:替换当前高亮显示的单词,并高亮显示下一个匹配的词;

?    n:不替换当前高亮显示的单词,然后高亮显示下一个匹配的词;

?    a:将不再出现提示而替换掉所有剩下匹配的词;

?    l:替换当前高亮显示的词,并且中断操作。

9将行号写到文件中

:%s/^/\=line(".") . ". "/g

该命令将会把显示的行号写到文件中去。这个与:set number不同,set number只是显示行数而不会对文件内容有所影响。

10使用等价值来替换一个特殊字符

原始文本: Current file path is ~/test/

:%s!\~!\= expand($HOME)!g

替换文本: Current file path is /home/leo/test/

11在插入一个新的条目时更改所有其他的条目

比如我们有下面的图书列表:

Article 1: Vi and Vim Editor: 3 Steps To Enable Thesaurus Option

Article 2: Vim Autocommand: 3 Steps to Add Custom Header To Your File

Article 3: 5 Awesome Examples For Automatic Word Completion Using CTRL-X

Article 4: Vi and Vim Macro Tutorial: How To Record and Play

Article 5: Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin

Article 6: How To Add Bookmarks Inside Vim Editor

Article 7: Make Vim as Your Bash-IDE Using bash-support Plugin

Article 8: 3 Powerful Musketeers Of Vim Editor ? Macro, Mark and Map

Article 9: 8 Essential Vim Editor Navigation Fundamentals

Article 10: Vim Editor: How to Correct Spelling Mistakes Automatically

Article 11: Transfer the Power of Vim Editor to Thunderbird for Email

Article 12: Convert Vim Editor to Beautiful Source Code Browser

忘记了3rd Article “Make Vim as Your Perl IDE Using perl-support.vim Plugin” ,现在我们要做的就是插入3rd Article “Make Vim as Your Perl IDE Using perl-support.vim Plugin”并且需要把后面的数目需要逐次增加1。

      那么我们可以使用命令:

:4,$s/\d\+/\=submatch(0) + 1/

      其中:

范围:4,$为从第4行到最后;

\d\表示一个数字的字符串;

\=submatch(0) + 1 取到数字并且加1;

由于这里没有flag,所以默认只会替换第一个吻合的单词。

更换后变为:

Article 1: Vi and Vim Editor: 3 Steps To Enable Thesaurus Option

Article 2: Vim Autocommand: 3 Steps to Add Custom Header To Your File

Article 3: Make Vim as Your Perl IDE Using perl-support.vim Plugin

Article 4: 5 Awesome Examples For Automatic Word Completion Using CTRL-X

Article 5: Vi and Vim Macro Tutorial: How To Record and Play

Article 6: Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin

Article 7: How To Add Bookmarks Inside Vim Editor

Article 8: Make Vim as Your Bash-IDE Using bash-support Plugin

Article 9: 3 Powerful Musketeers Of Vim Editor ? Macro, Mark and Map

Article 10: 8 Essential Vim Editor Navigation Fundamentals

Article 11: Vim Editor: How to Correct Spelling Mistakes Automatically

Article 12: Transfer the Power of Vim Editor to Thunderbird for Email

Article 13: Convert Vim Editor to Beautiful Source Code Browser

12将每个句子的首字母大写

:%s/\.\s*\w/\=toupper(submatch(0))/g

该命令将把每个句子的首字母大写。

\.\s*\w  --搜索模式,在句点后跟零个或多个空格,然后一个单词;

toupper – 将给定的文本改为大写字母;

submatch(0) –返回匹配的模式

使用vimgrep在多个文件中搜索

:vimgrep leo  *.txt  --可以使用该命令在当前所有txt文件中搜索leo,如果有多个匹配项,可以使用:cn来跳转到下一个。

命令

描述

:vimgrep pattern *

在多个文件中搜索pattern

:cn

跳转到下一个vimgrep搜索到的项

:cN

跳转到上一个vimgrep搜索到的项

:clist

列出所有vimgrep搜索到的项

:cc number

直接跳转到number对应的项

高亮显示搜索结果

:set hlsearch  该选项将高亮显示搜索的结果

:set nohlsearch  该选项将不高亮显示搜索的结果

:nohlsearch  清除高亮显示的结果

Vim增量搜索

:set incsearch该增量搜索模式将在你输入字符的时候就立即定位符合你输入的pattern,同样禁用该选项为:set noincsearch

给力的:match

:match ErrorMsg /Error/

将文件中所有的Error用ErrorMsg配色方案来显示;

比如::match ErrorMsg /printf/将显示如下:

其中,配色方案主要有:

?    ErrorMsg

?    WarningMsg

?    ModeMsg

?    MoreMsg

关于配色方案,我们也可以自己设定。




四、玩转VIM编辑器-额外技巧

给整个条目列表添加点阵式符号

比如,原文为:

The Geek Stuff article categories:

 

Vi / Vim Tips and Tricks

Linux Tutorials

SSH Tips and Tricks

Productivity Tips

HowTo & FAQ

Hardware Articles

Nagios Tutorials

MySQL and PostgreSQL Tips

操作后变为:

The Geek Stuff article categories:

 

*Vi / Vim Tips and Tricks

*Linux Tutorials

*SSH Tips and Tricks

*Productivity Tips

*HowTo & FAQ

*Hardware Articles

*Nagios Tutorials

*MySQL and PostgreSQL Tips

操作方法为:

1.    使用CTRL+V选定第一列;

2.    按下I(即i的大写字母);

3.    按下TAB可以移动全部选择行;

4.    然后插入*号即可,所有的操作都会影响所有的行;

5.    ESC退出编辑;

使用update-alternatives设置vim为系统通用默认编辑器

      在Debian操作系统中,可以设置vim为通用默认编辑器,命令为:

update-alternatives --set editor <PATH OF VIM>

将vim作为默认编辑器

      对于普通用户,可以在bashrc中,设置默认编辑器为vim,只需要在bashrc中添加export EDITOR=vi即可。

格式化段落

使用gqap来格式化段落。

重用宏

      对于我们使用的宏,如果不小心录制错误了,可以有两种方法来修改:

1.    重新录制宏;

2.    修改宏

a)     “ap    用于粘贴宏;

b)     修改宏中错误的地方;

c)     “ayy  重新录制该宏;

缩进代码块

原文为:

int main()

{

printf("Hello World!\n");

printf(“Done.”);

}

缩进后为:

int main()

{

printf("Hello World!\n");

printf(“Done.”);

}

有两种方法,分别为:

1.    移动光到{或者},然后输入>i{即可右移,左移为<;

2.    使用块模式

a)     将光标移动到需要移动的行;

b)     使用v键来选择移动区域;

c)     使用方向键选定行;

d)     使用>或者<来右移或者左移;

组合的威力

      前面讲了很多技巧,如果我们将导航命令和编辑命令组合,将会得到更强大的功能。

描述

d<导航键h、j、k、l>

向导航方向删除

dw

删除一个单词

d$

一直删除到行尾

d0

一直删除到行首

dG

删除到文件末尾

dgg

删除到文件开始

dk

删除当前和上一行

Dj

删除当前和下一行

dM

删除到屏幕中间

dH

删除到屏幕开始

dL

删除到屏幕底部

y <导航键h、j、k、l>

根据导航键来拷贝

c<导航键h、j、k、l>

根据导航键来修改

查看所有修改的历史

:changes即可

刷新屏幕

      当屏幕由于一些原因而导致失真时,可以使用CTRL+L来重绘屏幕。

插入非键盘字符

      使用:digraphs可以查看一些非键盘字符;

我们可以在插入状态中使用CTRL+K At来输入@,其中的At就是使用digraphs中查看的对应字符。这里可以输入日文、阿拉伯符号等。

      更多信息,参考:help diagraphs

Vim的ex模式

      输入Q就可以进入ex模式,然后输入visual或者:vi就可以回到正常模式。

      在我们需要连续不断地执行命令的时候,可以进入该模式

令光标位于匹配的末尾

      一般在使用/pattern搜索的时候,光标会位于匹配的开始出,我们可以使用/pattern\zs来使得光标位于该行的结尾。

查看字符的ASCII值

      在光标位于字符n上的时候,输入ga就会在底端显示:

<n> 110, Hex 6e, Octal 156

编辑二进制文件

使用命令行参数b,即 vim –b filename

折叠-查看部分源码

      这个特性对于有很多子函数的代码很有用;

自动折叠

:set foldmethod=indent即可折叠所有具有成对{}的代码。

折叠键

描述

za

展开光标下的内容

zR

展开所有折叠的内容

zM

折叠全部

手工折叠

:set foldmethod=manual

折叠键

描述

zf <导航键j、k>

根据导航符来折叠

zf/pattern

通过搜索到的pattern来折叠代码

      我们也可以将所有的折叠信息保存起来,用的时候再加载,然后会还原原来设置的。方法为:mkview 和 :loadview。




五、玩转VIM编辑器-自动补全

      自动补全需要前面有定义或者有词典导入。

自动单词补全

描述

CTRL-X CTRL-N

单词自动补全-下一个  -需要下一个的时候,直接CTRL-N即可。

CTRL-X CTRL-P

单词自动补全-上一个  -需要下一个的时候,直接CTRL-P即可。

自动行补全

CTRL-X CTRL-L  -需要下一个的时候,直接CTRL-L即可。

自动文件名补全

CTRL-X CTRL-F    -需要下一个的时候,直接CTRL-F即可。

词典补全

首先在~/.vimrc中设置: set dictionary+=/usr/share/dict/words

然后使用CTRL-X CTRL-K 就可以搜索到符合词典中单次的项。

同义词补全

      这个功能可以使得使用vim会变得更高效。使能一个同义词的方法:

1.    定义一个同义词文件,比如:在文件/home/leo/mythesaurus.txt中输入important,valuable,substantial,significant;

2.    然后在~/.vimrc中添加该文件路径,即:set thesaurus+=/home/leo/mythesaurus.txt;

3.    使用方法为:CTRL-X CTRL-T,在我们输入important的时候就会出现valuable等剩下的三个单词;

相比较与自己定义一个同义词文件,我们可以下载自定义好的巨大(moby)单词量的thesaurus,方法为:

wget http://www.gutenberg.org/dirs/etext02/mthes10.zip

$ unzip mthes10.zip

Archive: mthes10.zip

inflating: aaREADME.txt

inflating: roget13a.txt

inflating: mthesaur.txt

然后把mtheaur.txt添加到vimrc中,

set thesaurus+=/home/jsmith/mthesaur.txt

程序员如何使用该项特性

      比如PHP程序需要,就可以创建一个php-function.txt文件并添加到vimrc文件中,比如文件内容为:

math abs acos acosh asin asinh atan atan2 atanh

base_convert bindec ceil cos

errors debug_backtrace debug_print_backtrace

error_get_last error_log error_reporting

restore_error_handler

自动打开一个补全的弹出菜单

首先要下载autocomplpop.vim

l  mkdir –p ~/.vim/plugin

l  cd ~/.vim/plugin

l  wget –O autocomplpop.zip http://www.vim.org/scripts/download_script.php?src_id=11894

l  开启filetype plugin on

 

默认情况下,安装了该插件以后,弹出菜单会在我们输入单词的时候自动显示,而不再需要我们输入命令,这种情况同样适用于文件名的自动补全,还可以提供对omni tags标记的支持,比如在输入HTML、XHTML、CSS、Ruby和Python代码的时候,例如输入<body>后在输入</就会自动弹出body>。

自动提供单词的补全

首先需要安装word_complete.vim插件。

两种开启自动补全插件的方法:

1.    在使用vim打开文件后,输入:call DoWordComplete()即可;

2.    在vimrc中文件中,添加:autocmd BufEnter * call DoWordComplete()即可。

如果想禁用该特性,使用:call EndWordComplete()即可。

在输入的过程中,如果弹出的单词所示我们需要的,直接输入TAB即可,如果不是,那么我们只需要继续输入即可匹配。



六、VI下删除文本中的^M

关于回车与换行 

很久以前,老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,ASCII码为0D),另一个字符把纸上移一行 (称为换行, ASCII码为0A)。当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用一个字符来表示行尾,linux沿袭Unix,也是。Apple 开发者规定了用.开发 MS-DOS以及Windows 的那些家伙则决定沿用老式的.

三种行尾格式如下:

unix : \n

dos: \r\n

mac : \r

这意味着,如果你试图把一个文件从一种系统移到另一种系统,那么你就有换行符方面的麻烦。 

      因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下写的代码,行尾后“^M”符号。 

在Vim中解决这个问题,很简单,在Vim中利用替换功能就可以将“^M”都删掉,键入如下替换命令行: 

:%s/^M//g

 注意: 

上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”键生成的,或者Ctrl+v,再按回车。 

 或者使用这个命令: 

:% s/\r//g



七、玩转vim之vim插件-cvim

使用c-support 插件加速代码开发

安装

安装下载cvim.zip解压到~/.vim即可。

配置

安装完后,可在~/.vimrc 添加快捷键映射(如我上面的配置文件中示,下面这两个快

捷键是用于快速定位错误的):

" csupport plugin

map <silent> <F9> <Esc>:cprevious<CR>

map <silent> <F10> <Esc>:cnext<CR>

然后我们更新一下帮助文档:

:helptags $VIMRUNTIME/doc

:helptags ~/.vim/doc

常用 c-support 热键 (hotkey )

全部hotkey可用 evince ~/.vim/c-support/doc/c-hotkeys.pdf 打开查看。

insert mode, (n) normal mode, (v) visual mode

Comments 注释(c开头)

l  \cl 添加 end-of-line 注释 (n,v,i)

l  \cj 调整end-of-line 注释 (n,v,i)

l  \cs 设置end-of-line 注释的列数 (n)

l  \c* 用/* */注释掉一个代码块code ? comment /* */ (n,v)

l  \cc 用//注释掉一个代码块code ? comment // (n,v)

l  \co 取消注释 comment ? code (n,v)

l  \cfr frame comment (n,i)

l  \cfu function comment (n,i)

l  \cfdh file description (header) (n,i)

l  \chs H–file sections (tab compl.) (n,i)

l  \ckc keyword comment (tab compl.) (n,i)

l  \csc special comment (tab compl.) (n,i)

l  \cd Date (n,v,i)

l  \ct date & time (n,v,i)

Preprocessor 预处理指令(p开头)

l  \ps choose a Std. Lib. Include (n,i)

l  \pc choose a C99 include (n,i)

l  \p< #include<...> (n,i)

l  \p" #include"..." (n,i)

l  \pd #define (n,i)

l  \pu #undef (n,i)

l  \pie #if #else #endif (n,v,i)

l  \pid #ifdef #else #endif (n,v,i)

l  \pin #ifndef #else #endif (n,v,i)

l  \pind #ifndef #def #endif (n,v,i)

l  \pe #error (n,i)

l  \pl #line (n,i)

Idioms (i开头)

l  \if Function (n,v,i)

l  \isf static function (n,v,i)

l  \im Main() (n,v,i)

l  \ie enum + typedef (n,v,i)

l  \is struct + typedef (n,v,i)

l  \iu union + typedef (n,v,i)

l  \ip Printf() (n,i)

l  \isc Scanf() (n,i)

Run 运行编译(r开头)

l  \rc save and compile (n,i)

l  \rl Link (n,i)

l  \rr Run (n,i)

l  \ra set comand line arguments (n,i)

l  \rm run make (n,i)

l  \rma cmd. line arg. for make (n,i)

l  \rp run splint1 1 (n,i)

l  \rpa cmd. line arg. for splint (n,i)

l  \rd run indent (n,i)


你可能感兴趣的:(linux,vim,编辑器)