网上的一些vim指令

Vim/Vi 没有菜单,只有命令

Vim/Vi 工作模式介绍:

插入模式 和  命令模式 是vi的两个基本模式.

插入模式(insert mode), 是用来编写文本内容的.

命令模式(normal mode), 是用来编辑文本,如上下翻页等,复制粘贴,跳转到指定行等操作

进入和退出vim编辑器:

进入

vi filename

保存退出

:wq  保存修改并退出

ZZ  捷键,保存修改并退出(前面没有冒号)

:q!  不保存退出

:wq!  行保存退出,(文件所属者科忽略文件的制度属性)

:w  保存不退出

:wqa  保存所有文件

:w  new_filename 另存为指定文件

vim配置文件

所在目录~/.vimrc

进入插入模式

命令              |     作用

----------------------------------------

a                 |   在光标后附加文本

A                 |   在本行行末附加文本

i                 |   在光标前插入文本

I                 |   在本行开始插入文本

o (字母)          |   在光标下插入新行

O (字母)          |   在光标上插入新行

定位命令

命令  |   作用

---------------------------------------

h     |   左移一个字符

j     |   下移一行

k     |   上移一行

l     |   右移一个字符

$     |   移至行尾

0     |   移至行首

H     |   移至屏幕上端

M     |   移至屏幕中央

L     |   移至屏幕下端

(     |   (左小括号)移动到上一个句子首

)     |   (右小括号)移动到下一个句子首

{     |   (左大括号)移动到上一个段落首

}     |   (右大括号)移动到下一个段落首

快速定位

%      光当文本中存在( ,{  ,[  ,等符号时可以通过输入% 来跳到括号对应的位位置

[[     光标跳转到代码块开头即{处,要求{独占一行

gD     光标跳转到局部变量定义处

‘‘     光标跳转到上次停靠处

0      移至行首(把光标移至当前行的起始位置,第一个非空白字符之前)

^      把光标移至当前行的起始位置,也即当前行的第一个非空白字符位置

$      移至行尾

n$     移动到下面(包括光标所在行)n行的行尾

词组移动

命令 |                      作用

----------------------------------------------------------------------------------

w    |   移动到下一个word的首位置

W    |   移动到下一个WORD的首位置

e    |   移动到下一个word的末尾

E    |   移动到下一个WORD的末尾

b    |   移动到上一个WORD的首位置

B    |   移动到上一个WORD的首位置

word 是字面意义上的单词

WORD 是之间没有空白的一串字符

上面这些命令都使用‘iskeyword‘选项中的字符来确定单词的分界

vim重复输入文本

在normal mode下, 先按数字3键, 然后按 i键, 在输入go, 再按Esc键, 就可以输入gogogo了

行间定位

命令       | 作用

--------------------------

:set nu    | 设置行号

:set nonu  | 去想 行号

:set nu!   | 取消显示行号

gg         | 到第一行

G          | 到最后一行

nG         | 到第 n行

:n         | 到第 n行

滚屏

命令       |    作用

-------------------------

Ctrl + e   | 向下滚动一行

Ctrl + y   | 向上滚动一行

Ctrl + d   | 向下滚动半屏

Ctrl + u   | 向上滚动半屏

Ctrl + f   | 向下滚动一屏

Ctrl + b   | 向上滚动一屏

行中快速定位

命令       | 作用

-------------------------

f          | 向后查找

F          | 向前查找

可以结合数字来进行多次查找, 如按下3fq , 就会向下查找第三个q

全文搜索

命令       | 作用

-------------------------

*          | 全文向后查找

#          | 全文向前查找

字符替换

命令       | 作用

-------------------------------------------------------------------------

r          | 替换光标所在处一个字符,如ra,就是将当前光标所在处字符替换为a

R          | 开始替换,直到按ESC键退出替换

cc         | 取代光标所在整行

S          | 与ss效果相同

C          | 取代到行尾,包括光标处字符

c0         | 取代到行首,不包括光标处字符

c^         | 与c0 效果类似

用Ex mode 进行替换

命令              |   作用

---------------------------------------------------------------------------------------------------------

/string           |   向前搜索指定字符串

?string   |   从光标处开始向上开始查找字符从string, vim中有一些特殊字符在查找时需要转义.*[]^%/?~$

set ic   |   查找时,忽略大小写

set noic   |   查找时,不忽略大小写

:noh     |   关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮.

:set incsearch   |   逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成.

:set wrapscan    |   重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启.

n                 |   查找模式下,搜索指定字符串的下一个出现位置

N                 |   查找模式下,往上找指定字符串出现的位置

s/old/new/    |   用old替换new,替换当前行的第一个匹配

s/old/new/g    |   用old替换new,替换当前行的所有匹配

:%s/old/new/      |   用old替换new,替换所有行的第一个匹配

:%s/old/new/g     |   全文替换指定字符串

:n1,n2s/old/new/g |   在一定范围内替换指定字符串

若将g改为c,就会询问是否替换.在替换文本old或new中有特殊字符,如“/”等,都需要用\进行转义

语法为 :[addr]s/源字符串/目的字符串/[option] /替换篇开始

[option] : 表示操作类型

g 表示全局替换;

c 表示进行确认

p 表示替代结果逐行显示(Ctrl + L恢复屏幕);

省略option时仅对每行第一个匹配串进行替换;

下面是一些例子

#将That or this 换成 This or that

:%s/\(That\) or \(this\)/\u\2 or \l\1/

#将句尾的child换成children

:%s/child\([ ,.;!:?]\)/children\1/g

#将mgi/r/abox换成mgi/r/asquare

:g/mg\([ira]\)box/s//mg//my\1square/g    //搞不懂,这里是mark a

:g/mg[ira]box/s/box/square/g

#将多个空格换成一个空格

:%s/  */ /g

#使用空格替换句号或者冒号后面的一个或者多个空格

:%s/\([:.]\)  */\1 /g

#删除所有空行

:g/^$/d

#删除所有的空白行和空行 //mark b

:g/^[  ][  ]*$/d

#在每行的开始插入两个空白

:%s/^/  /

#在接下来的6行末尾加入 //从这里可以看出$可以理解为一个虚拟位,相当于0行

:.,5/$/./

#颠倒文件的行序

:g/.*/m0O //mark c

:g/^/m0O

#寻找不是数字的开始行,并将其移到文件尾部

:g!/^[0-9]/m$

:g/^[^0-9]/m$

#将文件的第12到17行内容复制10词放到当前文件的尾部

:1,10g/^/12,17t$ //mark d, 最无法理解的一个

#将chapter开始行下面的第二行的内容写道begin文件中

:g/^chapter/.+2w>>begin

:/^part2/,/^part3/g/^chapter/.+2w>>begin

:/^part2/,/^part3/g/^chap: s/vivian/sky/ 替换当前行第一个vivian 为 sky

1. : s/vivian/sky/ 替换当前行第一个 vivian 为 sky

: s/vivian/sky/g 替换当前行所有 vivian 为 sky

2. : n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

: n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

(n 为数字,若 n 为 .,表示从当前行开始到最后一行)

3. : %s/vivian/sky/(等同于 : g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

: %s/vivian/sky/g(等同于 : g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

: s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

可视模式

Ctrl+V 进入块选择, LINUX下是Ctrl-v,但是在windows下的GVIM,Ctril-v是粘贴.所以,windows下按 Ctrl-q 进入块(列)编辑

v: 字符选择,会将光标经过的地方反白选择

V: 行选择,会将光标经过的行反白选择

[ctrl]+v: 块选择,可以用长方形的方式来选择数据

可视模式下的指令(visual command)

y: 复制反白的地方

d: 删除反白的地方

p: 粘贴到上一行

P: 粘贴到下一行

$: 将块选择中的每一行都扩展至行尾

h: 停止上面的状态

Ixxx<Esc>  在被选中的块的前面插入xxx

0Ixxx<Esc>  在被选中的块的每一行的行首插入xxx

Axxx<Esc>  在被选中的块的后面追加xxx

$Axxx<Esc> 在被选中的块的每一行的行尾追加xxx

cxxx<Esc>  在被选中的块中删除被选中的块并以xxx替代

Cxxx<Esc>  在被选中的块中删除被选中的块一直到第一行行尾,并以xxx替代

rx    把被选中的块中的所有字符都替换成x

~  交换大小写

U  小写变大写

u  大写变小写

>  将被选中的块向右移动一个shift单位,空出来的地方填补空格

<  同上,但是是向左移动,但是移动的单位同时受限于左边的边界

J  将下一行附在当前行的末尾,本行的尾空格与下一行的头空格全都只用一个空格代替

gJ  同上,但是不对原文本内容做任何改动

:read a.txt将a.txt读入并放在当前行的下一行

:$r  a.txt将a.txt读入并放在当前文件的最后

:0r  a.txt将a.txt读入并放在当前文件的最开始

:.,$w tmp将当前行到最后一行写入tmp文件中

:.,$w! tmp将当前行到最后一行写入tmp文件中,即使tmp已存在

:.write >>tmp将当前行追加到tmp文件

gU  将字符变大写

gUl  将当前字符变大写

gUw  将当前字符至该word结束变大写

gU$  将当前字符至行尾变大写

gUgU 将当前整行变大写,可省略为gUU

gu  将字符变小写

gul  将当前字符变小写

guw  将当前字符至该word结束变小写

gu$  将当前字符至行尾变小写

gugu 将当前整行变小写,可省略为guu

g~  改变字符大小写

g~l  改变当前字符大小写

g~w  改变当前字符至该word结束大小写

g~$  改变当前字符至行尾大小写

g~g~ 改变整行字符大小写,可省略为g~~

:[range]![shell command] 以range范围内的文本作为输入去执行command命令,并将结果覆盖写回range中

或者用光标移动符代替:[range]

:read ![shell command] 运行command并将输出写到当前行的下面

:0r ![shell command]  同上,输出被写入文件开头

:write ![shell command] 运行command并将整个文件写入到command的输入

:.w ![shell command]  同上,只会将当前行输入给command

Ctrl+L 重绘屏幕

:%s/\<four\>/4/g 将文件中所有的单词four替换成4

vim *.cpp

qq:%s/\<GetResp\>/GetAnswer/ge<Esc>:[email protected] 将所有cpp文件打开并把所有的GetResp单词换成GetAnswer

:%s/\([^,]*\), \(.*\)/\2 \1/ 将文件中所有的First, Last形式替换成Last First形式

g Ctrl+g 统计字数(要统计某一块具体的字数可以使用visual模式)

K  查找man页

:%s/\s\+$//  删除所有行末空白

————————————————————————————————

WINDOWS下的GVIM的块选择命令是:

在gvim(windows版)中,块选择的快捷键不是<Ctrl-v>,此快捷键为粘贴.

先按V(貌似可以不按v),在按组合键Ctrl-q,然后使用hjkl来移动光标选择块.

快速选择多行,如果用 hjkl慢慢移动就太慢了,所以,我们选择多行,可以先输入行号,然后输入G(就是shift+g).

一般的选择模式为: v(小写),此时会显示: 可视.

行选择模式为: V(大写),此时会显示: 可视-行.

最凶残的块选择模式则为: <Ctrl-q>,此时会显示: 可视-块.

如果希望批量插入注释,则为以下操作顺序:

1、移动光标到注释块的第一行.

2、按Esc进入Normal模式.

3、按<Ctrl-q>进入块选择模式.

4、用h、j、k、l 键向下移动光标(注意: 这里只能用这四个键移动,不支持方向键).

5、选中相应的行后,按I(大写)键.

6、输入//,并按Esc键,完成注释.

注意: gvim中ctrl +v 变成粘贴,如果你按下 Ctrl + v 没能进入列选择模式,请看这里)是因为vim的设计者用了个mswin.vim,以此能够使用windows的快捷键粘贴,撤销等.但是这又会和vim本 身的快捷键冲突.http://edyfox.codecarver.org/html/vimrc_mswin.html  .

我们还可以通过注销gvim的vimrc配置文件注销与 mswin.vim相关的行,则可以直接使用ctrl+v进入块选择模式

———————————————————————————^$

重复执行操作

很多时候一个操作,我们要执行几遍.通过   .    来进行重复的操作

举例: 假设光标在abc处.我们来重复删除2个单词:

abc  bdf   sdfe   erwer   eete   wer  uty

在command模式下,先输入  d2w  ,然后   输入  . (英文的句号)  ,就会不断执行删除两个单词的操作,按多少次  .   就重复多少次

————————————————————————————————————————————

撤销操作:

如果编辑文本输错了,可在命令模式下按  u键  撤销  和 ctrl+R  返回撤销

u                         取消上一步操作(最多连续取消500次)

Ctrl+r                 恢复上一步被撤销的操作

U              撤销当前一行的操作

—————————————————————————————————

自动补齐

C-n      匹配下一个关键字

C-p      匹配上一个关键字

——————————————^$--------------------------

简单排版

:ce(nter)                居中显示光标所在行

:ri(ght)                靠右显示光标所在行

:le(ft)                        靠左显示光标所在行

J                                将光标所在下一行合并到光标所在行

>>                                光标所在行增加缩进(一个tab)

<<                                光标所在行减少缩进(一个tab)

n>>                        光标所在行开始的n行增加缩进

n<<                        光标所在行开始的n行减少缩进

——————————————————————————————————————————————

多tab|窗口拆分

:tabnew [++opt选项] [+cmd] 文件            建立对指定文件新的tab

:tabc       关闭当前的tab

:tabo       关闭所有其他的tab

:tabs       查看所有打开的tab

:tabp      前一个

:tabn      后一个

关闭窗口

:close             最后一个窗口不能使用此命令,可以防止意外退出vim.

:q 如果是最后一个被关闭的窗口,那么将退出vim.

标准模式下:

gt , gT 可以直接在tab之间切换.

还有很多他命令, 看官大人自己, :help table 吧.

:new    水平切割窗口

:split    水平切割窗口(或者直接输入   :sp  也可以)

:vsplit   垂直切割( 也可以  :vs  )

Ctrl+ww 移动到下一个窗口

或者 先按组合键ctrl+w ,然后都松开,然后通过j/k/h/l(等于vim移动的方向键) 来移动大哦哦左/上/下/右的窗口

Ctrl+wj 移动到下方的窗口

Ctrl+wk 移动到上方的窗口

vim -o a.txt b.txt c.txt为每一个文件打开一个水平分割窗口

vim -O a.txt b.txt c.txt为每一个文件打开一个垂直分割窗口

:only  录制宏.按q键加任意字母开始录制,再按q键结束录制(这意味着vim中的宏不可嵌套),使用的时候@加宏名,比如qa...q录制名为a的宏,@a使用这个宏.

vim中的几个文本对象: aw 一个单词;  as 一个句子;  ap 一个段落

zfap 创建一个段落的折行

zc 关闭折行

zo 打开折行

———————————————————————————————————

vimdiff a.txt b.txt打开a.txt和b.txt并进行比较(这个是shell中的命令)

:vertical diffsplit a.txt打开分割窗口用于比较当前文件和a.txt

:set scrollbind同步滚动 noscrollbind不同步滚动

qa  将后续命令录制在寄存器a中(从a到z有26个可用)

q  停止录制

@a  执行寄存器a中录制的命令

@@  执行刚刚执行过的寄存器中的命令

qA  向寄存器a中追加命令

"Ayy 将当前行追加复制到寄存器A中

:[range]s+from+to+[flags] 把range范围内的from替换成to

:[range]s=from=to=[flags] 把range范围内的from替换成to

:[range]s/from/to/[flags] 把range范围内的from替换成to

range为空时,只对当前行有效

range为%时,对所有行都有效

flags为空时,只替换指定行的第一个from

flags有g时,替换指定行的所有from

flags有c时,要求用户对每次替换进行确认

flags有p时,要求:s命令列出所有改变的行

flags有e时,要求:s命令在没有找到任何匹配时也不要报错

:1,5s/from/to/g 把第1行到第5行中所有的from替换成to

:3s/from/to/g 把第3行中所有的from替换成to

:.write a.txt 把当前行写入a.txt

:.,$s/from/to/g 把当前行到文件结束所有的from替换成to

:?^Chapter?,/^Chapter/s/from/to/g 把上一个Chapter到下一个Chapter之间的所有from替换成to

:.+3,$-5s/from/to/g 把当前+3行到倒数第5行的全部from替换成to

:‘a,‘bs/from/to/g 把从a标记的行到b标记的行(包含a和b行)中全部from替换成to,注意是单引号不是倒引号

:[range]g/{pattern}/{command} 在range范围内找到匹配pattern的行然后执行command命令

这里的command必须是:开头的命令,而不能直接使用normal模式下的命令,除非使用|:normal|

———————————————————————————————————————^$-

~  改变光标所在字符的大小写,并将光标移动到下一个字符上

:edit foo.txt在vim中开始编辑另一个文件

:edit! foo.txt强制丢弃当前未保存的修改

:next 转到下一个文件,可以缩写为:n

:next! 强制丢弃未保存的修改并转到下一个文件

:wnext 保存当前文件的修改并转到下一个文件

:previous 转到上一个文件

:wprevious 保存当前文件的修改并转到上一个文件

:last 转到最后一个文件

:first 转到第一个文件

:2next 转到下面第二个文件

:bn  转到下一个文件,若到最后一个文件,则转到第一个文件

:bp  转到上一个文件,若到第一个文件,则转到最后一个文件

:args 查看整个列表中有哪些文件

:args a.txt b.txt c.txt重新定义一个文件列表

:args *.txt打开所有txt文件

Ctrl+^ 快速切换到上一个文件

`"  移动光标到上一次离开该文件时光标所在的位置

`.  移动光标到最后一次对文件做出修改的位置

mA  设置当前位置为全局标记A(大写字母)

`A  跳转到全局位置A,即使它不在当前文件内

:set backup生成备份文件

"fy  把选中的内容复制到寄存器f中

"fp  把寄存器f中的内容粘贴出来

"wdaw 把光标所在的word删除并放入寄存器w中

:write >> logfile把当前文件写入(追加)到logfile中

vim -R 只读打开

vim -M 强制禁止修改打开

:edit a.txt打开文件a.txt

:saveas b.txt把当前缓冲区存入b.txt并同时打开b.txt进行编辑

:file c.txt把当前文件的名字改为c.txt

———————————————————————————————————————————————

书签

mx                设定书签,x是任意一个字母,通常小写(a-z),x为小写字母时,局限在一个文件之间切换;大写字母时,可在文件之间切换.

`x                (`位于数字键1旁边)跳转到书签x

:marks                        查看标签

#############################################实例#########################################

应用实例

导入文件或shell执行结果到正在编辑的文件中

:r 文件名

:r /etc/issue    将issue内容导入正在编辑的文件中

:!shell命令                在vim中执行shell命令,执行完后按回车会到vim界面

:r !shell命令        (r与!之间有空格)将shell命令执行的结果导入到本文件中

在Vi中执行命令   :!命令

:!ls /root            在编辑文件同时查看/root下的文件情况

不用退出vim

:r !date                在vim下将date命令的结果导入编辑文件中

定义快捷键          :map  快捷键 触发命令

ctrl+v  再ctrl+p             或者直接ctrl+v+p ,

不要把^当做尖角号,

:map ^x 命令        (map与^之间、x与命令之间有空格,此处到^并非键盘上的^,而是按下ctrl+v出现到快捷键,表示ctrl键,后面到x为任意字母)按下ctrl+x后会执行对应到命令

例:

:map ^p I#<ESC> 当按下ctrl+p快捷组合键时,在光标所在行行首添加一个#号,并回到命令模式

范例:        :map ^P I#<ESC>

ctrl+p=插入#号然后回到命令模式

I表示vim的插入命令

:map ^E [email protected]

ctrl+E=插入,i表示当前光标处插入

:map ^B 0x

ctrl+B=将光标移至行首删除光标所在字符

0表示移至行首,x表示删除光标所在字符

连续行注释  : n1 ,n2s/^/#/g

在行首加#,^表示行首

:n1 ,n2s/^#//g

将行首的#号删除

:n1 ,n2s/^/\/\//g

\表示转义符

替换             :ab ksharp  [email protected]

输入ksharp,回车或者空格后,就变成了

[email protected]

:unab    ksharp  [email protected]

取消替换

连续行注释

:n1,n2/^/#/g                (#号为注释符号,在shell中注释符号为#,C++中为//)

:n1,n2/^/\/\//g        C++源文件多行连续注释

—————————————————————————————————————————————^$

相关插件设置

########################################

phpcomplete插件

如何使用:

vi index.php

插入一段php代码后比如:

htmlsp

先按下 Ctrl+x进入^X模式,再按下 Ctrl+o, 就能看到提示列表框,以及对应的function,还有对应的函数定义比如参数等等

Ctrl+n, Ctrl+p 来上下选择,ESC 来取消提示

在Insert模式下:

<backspace> 删除光标前的一个字符

<del> 删除光标所在的一个字符

Ctrl+W 删除光标前的一个单词

Ctrl+U 删除光标前的一个行(按照输入顺序,不一定直接删到行首)

Ctrl+p  补全单词

Ctrl+n  补全单词(向前查找)

Ctrl+x Ctrl+f 补全文件名

Ctrl+x Ctrl+l 补全整行内容

Ctrl+a 补全上一次insert模式下插入的内容

Ctrl+v 插入一个由ascii码表示的符号,三位ascii码或者遇到第一个非数字时生效

———————————————————————————————————————————^$-----

########################################

auto pair插件(自动封闭括号等)     关闭/开启  ctrl+p

##########################################

netrw.vim插件

vim中查看到文件的目录结构

: e  /home/zebra/myprogram/src

附带的操作目录文件快捷键如下:

<F1>     显示帮助

<cr>     如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件

-            返回上级目录

c            切换vim 当前工作目录正在浏览的目录

d            创建目录

D            删除目录或文件

i            切换显示方式

R            文件或目录重命名

s            选择排序方式

x            定制浏览方式, 使用你指定的程序打开该文件

###################################################

"taglist插件

:TlistOpen

:TlistClose

################################################

"NERDTree 插件

map <F6> :NERDTreeToggle<CR>

按键

C(大写 C 键)

将光标所在目录设置为根目录

u(小写 u 键)

转到上一级目录

o(小写 o 键,不是“零”)

展开(或折叠)光标所在目录的子目录.如果光标所在位置是一个文件,则在编辑窗口中打开该文件

此外在目录树窗口中输入目录 :Bookmark 收藏名 还可以将光标所在目录添加到收藏夹中.下次使用 :BookmarkToRoot 收藏名 可以直接转到该目录,并且以该目录作为根目录.更多命令可以参考 NERDTree 的帮助文档.

############################################################################

NERD Commenter插件设置

下载安装后,修改vim的配置文件,在下面加入

" NERD_commenter.vim

" <Leader>ca 在/*...*/与//这两种注释方式中切换(其它语言可能不一样了)

let mapleader=","     "leader默认是  \  ,为了方便,改为  逗号

map  <F7>   <leader>c$  "注视到行尾

map <F8> <leader>cc   ”单行注释

map <F9> <leader>cu   "取消注释

map <F12> <leader>ca   "sexy多行代码注释

/*

*/

这种

注意: leader默认符号是  \  ,我这里用let来修改leader 符号为逗号 ,即便如此,注释时也要同时按好几个键,比如:

注释3行代码,要依次输入    3 ,  c  空格键       四个按键.  同时速度要快,否则就不是注释,而变成了修改文档的内容了.我当时安装NERD Commenter试了半天,都没注释成功.后来看了比人的文章,飞快的按下这几个按键,就注释成功了.但是还是太繁琐了,就修改为一个按键,就可以注释 /取消注释.按我的这样修改后,

F7                        注视到行尾

F8                         单行注释

先按x,后按F8     即注释x行的代码,记得按的速度要快

F9                        取消注释 ,也可以与数字搭配

F12                      sexy的代码注释  ,也可以与数字搭配

依次按    ,  c   a                表示//  和/*   */ 两种注释间切换.这个我就没设置一键操作 ,大家个以根据自己的情况改成某个按键

###########################################################

txtBrowser 插件

<Leader>s: 用搜索引擎(可定制, 默认为google)搜索光标下的单词或选中的文本.

<Leader>f: 用网络字典(可定制, 默认为google.cn)对光标下的单词或选中的文本查字典.

<Leader>g: 打开光标下或选中的URL.

<Leader>h: 高亮光标下的单词或选中的文本(可跨行).

*:                 向前搜索光标下的单词或选中的文本(可跨行)

?:                 向后搜索光标下的单词或选中的文本(可跨行)

########################相关vim技巧#################################3

1.用:set list来查看所有不可见字符,反之用:set nolist关闭

2.vim操作ftp,打开:

:e ftp://192.168.0.1/1.txt

保存(如果不存在则创建):

:w ftp://192.168.0.1/1.txt

读取:

:r ftp://192.168.0.1/1.txt

以上操作第一次打开时需要输入用户名和密码,

以后就不用了,vim 会记住的.

3.Ctrl+R 是在编辑时或者命令行界面下调入寄存器值的热键,Ctrl+R+/ 会得到上一次查询的条件,Ctrl+R+<寄存器名>; 相当于 Normal 模式下的 "<寄存器名>;p 命令

4.vim在编辑一个文件时如果打开多个文件,:args <CTRL-R>;% file2 file3

5.如何删除连续两行之间的回车符,使连续的两行成为一行,Jx

6.想显示行号,可以用 :set nu

7.vim中光标在C函数和系统调用上时,按K进入man手册页

8.V 打开"可视模式"(不是虚拟模式,虚拟是 virtual)后,可以有很多种办法移动光标的,不一定非得用 h j k l , 比如可以搜索定位, 也可以用 [[ ]] ][ [] } { 等段落定位的命令. v]] v[[ v} 这样就可以选中一大块,而不用一行一行地选 还有 H L 这些都可以用. 详细请 help motion 另外, vim 内置了很多以 a 打头的文本对象, 如 a{ 表示一个 {} 块, ap 表示一个段落等等.=a{ 就可以重排当前语法块.

9.全选的命令是 ggVG gg表示到第一行第一个字母, V进入visual line G则到文件尾.

10.vim是否支持将语法高亮度显示的结果保存为一个html文档,:TOhtml

11.用:split new | r!ls 来获得外部命令的输入,其中r !ls 则表示执行外部命令 ls,并且捕获(读入)它的输出.

12.vi中用``就可以回到刚才的位置,vim中用ctrl+o

13.用:set ai的命令来启动自动缩进.用:syntax on命令来启动语法着色

14.在"插入模式"下删除光标到行尾的字符,^od$,^o 表示同时按住 Ctrl 和 O 键,其实也可以是^oD,还有就是如果要删除到某个字符位置的话,就用^odfx,x表示要删除到的字符

15.自动缩进set autoindent 和set cindent

16.括号自动补全:iab ( ()

17.删除所有偶数行<ESC>;[email protected]

18.排版代码gg=G

19.:args查看正在编辑的文件名或者用ctrl+g

20.gj gk 分别可以向下、向上移动一个物理行

切换vim目录:

:cd   目录路径

修改当前vim编辑的文件的文件名

:f    新文件名

关于代码折叠相关的快捷键,大家其实可以自己在vim中输入 :help zo  来查看打开和关闭折叠的相关解释:

你可以在用户手册的第 28 章找到有关折叠的序论.|usr_28.txt|

1. 折叠方法        |fold-methods|

2. 折叠命令        |fold-commands|

3. 折叠选项        |fold-options|

4. 折叠行为        |fold-behavior|

{Vi 没有折叠}

{仅当编译时加入 |+folding| 特性才有效}

==============================================================================

1. 折叠方法                    *fold-methods*

可用选项 ‘foldmethod‘ 来设定折叠方法.

设置选项 ‘foldmethod‘ 为非 "manual" 的其它值时,所有的折叠都会被删除并且创建新

的.如果设置成 "manual",将不去除已有的折叠.可以利用这一点来先自动定义折叠,

然后手工调整.

有 6 种方法来选定折叠:

manual        手工定义折叠

indent        更多的缩进表示更高级别的折叠

expr        用表达式来定义折叠

syntax        用语法高亮来定义折叠

diff        对没有更改的文本进行折叠

marker        对文中的标志折叠

手 工                        *fold-manual*

使用命令来手工定义要折叠的范围.分析文本并发现折叠的脚本也可用这种方法.

折叠的级别仅由嵌套次数来定义.要对一定行数的折叠增加级别,可以对相同的行反复定

义折叠.

当你退出文件编辑时,手工折叠会被遗弃.要保存折叠,使用 |:mkview| 命令.之后要

恢复可以使用 |:loadview|.

缩 进                        *fold-indent*

由缩进行自动定义折叠.

折叠级别由行的缩进除以 ‘shiftwidth‘ (向下取整) 计算而得.连续的,有同样或更高

的折叠级别的行,形成一个折叠.在其中,有更高折叠级别的行形成嵌套的折叠.

嵌套的级别数受 ‘foldnestmax‘ 选项限制.

某些行会被忽略并得到上一行或下一行的折叠级别 (取较小值).符合条件的这样的行要

么是空行,要么以 ‘foldignore‘ 选项里包含的字符开始.在查找 ‘foldignore‘ 里包含

的字符时,空白字符会被忽略.对于 C,该选项使用 "#" 来略过要预处理的那些行.

当你想用另一种方式来略过行时,使用 ‘expr‘ 方法.在 ‘foldexpr‘ 中 |indent()| 函

数被用来取得一行的缩进.

表 达 式                        *fold-expr*

就象用 "indent" 方式一样,表达式方式的折叠也是由折叠级别自动定义的.对每行,通

过计算选项 ‘foldexpr‘ 的值来并得到它的折叠级别.如:

对所有以制表符开始的连续的几行,创建折叠: >

:set foldexpr=getline(v:lnum)[0]==\"\\t\"

调用一函数来计算折叠级别:   >

:set foldexpr=MyFoldLevel(v:lnum)

用空白行分开的段落构成折叠:   >

:set foldexpr=getline(v:lnum)=~‘^\\s*$‘&&getline(v:lnum+1)=~‘\\S‘?‘<1‘:1

同上:   >

:set foldexpr=getline(v:lnum-1)=~‘^\\s*$‘&&getline(v:lnum)=~‘\\S‘?‘>1‘:1

备注: ":set" 要特殊处理的字符必须用反斜杠转义.(空格,反斜杠,双引号等等,参考

|option-backslash|)

这些是表达式的计算条件:

- 当前缓冲区和窗口值依所在行而定

- 变量 "v:lnum" 被定为该行行号

- 计算结果将用以下方式解释:

值            代表 ~

0            这行不折叠

1, 2, ..        这行的折叠级别 1,2 等

-1            折叠级别没有定义,使用这行之前或之后一行的级别值,取其

中较小的一个.

"="            使用上一行的折叠级别.

"a1", "a2", ..    上一行的折叠级别加 1,2,..

"s1", "s2", ..    上一行的折叠级别减 1,2,..

"<1", "<2", ..    此折叠级别在本行结束

">1", ">2", ..    此折叠级别在本行开始

不需要用 ">1" ("<1") 标志折叠的开始 (结束).当这行折叠级别高于 (低于) 上一行的

级别时,折叠将开始 (结束).

表达式必须没有副作用.在缓冲区里的文字,光标位置,查找模式,选项等等,不能被改

动.如果你非常小心,改动并恢复这些设置还是可以的.

表达式中有错误或者计算结果不能识别时,Vim 不会产生错误消息,而是将折叠级别设为

0.所以当需要调试时,可将 ‘debug‘ 选项设为 "msg",错误消息就可以被见到了.

备注: 由于每一行关于表达式的值都要被计算,这一折叠方式可能会很慢!

最好避免使用 "=" , "a" 和 "s" 作为返回值,因为 Vim 不得不经常向后回溯以得到折

叠级别.这会降低执行速度.

|foldlevel()| 计算相对于上一折叠级别的折叠级别.但要注意,如果该级别未知,

foidlevel() 返回 -1.它返回的级别对应于该行开始的位置,尽管折叠本身可能在该行

结束.

折叠可能会没有及时更新.用 |zx| 或者 |zX| 可以强制折叠更新.

语 法                        *fold-syntax*

由带有 "fold" 参数的语法项来定义折叠.|:syn-fold|

折叠级别由嵌套的折叠层数来定义.嵌套数由 ‘foldnestmax‘ 限定.

要小心指定合适的语法同步方式.如果这里有问题,折叠和显示高亮可能会不一致.尤其

在使用可能跨越多行的模式时更要小心.如果有疑问,不妨尝试如下的强制同步: >

:syn sync fromstart

<

比 较                        *fold-diff*

对没有改动的文本或靠近改动的文本自动定义折叠.

这个方法仅适用于当前窗口设定 ‘diff‘ 选项来显示不同之处时才有效.不然,整个缓冲

区就是一个大的折叠.

选项 ‘diffopt‘ 可以指定上下文.即折叠和不被折叠包括的改变之间相距的行数.比

如,设定上下文为 8: >

:set diffopt=filler,context:8

默认值是 6.

当设定了 ‘scrollbind‘ 选项时,Vim 会试图在其它比较窗口中打开相同的折叠,这样这

些窗口就会显示同一处文本.

标 志                        *fold-marker*

在文本中可以加入标志来指明折叠开始和结束的地方.这可以让你精确的定义折叠.这也

让你可以放心地删除和复制折叠而不用担心错误包括了某些行.选项 ‘foldtext‘ 通常设

置为使折叠行显示折叠标志之前的文本.这样做可以为折叠命名.

标志可以包含级别数,也可以使用匹配对.包含级别数较简单,你无须添加结束标志,并

可以避免标志不配对的问题.如: >

/* global variables {{{1 */

int varA, varB;

/* functions {{{1 */

/* funcA() {{{2 */

void funcA() {}

/* funcB() {{{2 */

void funcB() {}

折叠开始于 "{{{" 标志.接下去的数字决定了折叠级别.产生的效果依当前折叠级别和

该折叠标志给定的级别的大小关系而定:

1. 如果遇到级别相同的标志,上一个折叠结束,另一个有同样级别的折叠开始.

2. 如果遇到级别更高的标志,开始一个嵌套的折叠.

3. 如果遇到级别更低的标志,所有大于或等于当前级别的折叠结束,且指定级别的折叠

开始.

数字指定了折叠级别.不能使用 0 (忽略级别为 0 的标志).你可以使用 "}}}" 带上一

个数字来表示这个级别的折叠结束.此行以下的折叠级别将比当前级别小一.备注: Vim

不会回溯匹配的标志 (这将耗费太多的时间).如: >

{{{1

fold level here is 1

{{{3

fold level here is 3

}}}3

fold level here is 2

你也可以用一对匹配标志 "{{{" 和 "}}}" 来定义折叠.每个 "{{{" 使折叠级别加 1,

"}}}" 使折叠级别减 1.注意一定要使标志匹配!如: >

{{{

fold level here is 1

{{{

fold level here is 2

}}}

fold level here is 1

带数字的标志和没有带数字的标志可以混合使用.对于一个大折叠我们可以使用带数字的

标志,在函数的内部我们可以使用不带数字的.如对文件中的 "结构定义","局部变量"

和 "函数原型" 各个部分,使用级别 1 的折叠.对定义和函数体使用级别 2 的标志.而

在函数内部可以使用不带数字的标志.当你在一函数中作更改以分割折叠时,你无须记着

标志在哪里.

选项 ‘foldmarker‘ 可设定所用的标志.建议保留默认值 "{{{,}}}".这样在 Vim 用户

间交换文件时就不会出问题.有时为了要编辑的文件必须改变该选项 (如,文件包含了来

自另一个编辑器的折叠标志,或对于当前文件的语法而言,折叠标志会产生歧义等).

*fold-create-marker*

"zf" 可通过标志来创建一个折叠. Vim 将为你插入开始和结束标志.这些标志由

‘foldmarker‘ 指定.标志会被添加在行末.如果 ‘commentstring‘ 不为空,使用之.

以下情况下可能无法正常工作:

- 此行已有一个带级别的标志了.Vim 无法判断该如何做.

- 在附近的折叠里使用了带级别的标志,使添加无法进行.

- 这行包含在一注释中,且 ‘commentstring‘ 不为空,且嵌套的注释是非法的.如,在

C 的注释中加入 /* {{{ */ ,这将使现有的注释中断.你可以在注释之前或之后添加

标志,或手工添加.

总的来说,当你已有带级别的标志时,再让 Vim 为你创建标志不是个好主意.

*fold-delete-marker*

"zd" 可用来删除一个用标志定义的折叠. Vim 将为你删除标志.Vim 将在折叠的开始和

结束处根据 ‘foldmarker‘ 查找开始和结束标志.如果标志周围文字和 ‘commentstring‘

匹配,这些文字也会被删除.

但在以下情况下无法正确执行:

- 当一行包含有多于一个的标志且其中一个指定了级别.Vim 不考虑结果是不是真能删除

折叠,而仅删除第一个标志.

- 当这个标志带有级别且同时被用来开始或结束几个折叠时.

==============================================================================

2. 折叠命令                    *fold-commands* *E490*

所有的折叠命令用 "z" 开头.提示: 如果你从侧面看 "z" 象一张叠起来的纸.

创 建 和 删 除 折 叠 ~

*zf* *E350*

zf{motion}  或

{Visual}zf    创建折叠操作符.

仅当 ‘foldmethod‘ 设为 "manual" 或 "marker" 时有效.

用 "manual" 方式,新建的折叠会被关闭.同时 ‘foldenable‘ 会被设

定.

参考 |fold-create-marker|.

*zF*

zF        对 [count] 行创建折叠.其余同 "zf" .

:{range}fo[ld]                        *:fold* *:fo*

对 {range} 内的行创建折叠.其余同 "zf" .

*zd* *E351*

zd        删除 (delete) 在光标下的折叠.当光标在被折叠的行上,该折叠被删

除.嵌套的折叠上移一级.在可视模式下所选区域 (部分) 涵盖的折叠

都被删除.注意: 这种一次删除多个折叠的简单方法不可撤销.

仅当 ‘foldmethod‘ 设为 "manual" 或 "marker" 时有效.

参考 |fold-delete-marker|.

*zD*

zD        循环删除 (Delete) 光标下的折叠.在可视模式下所选区域 (部分) 涵

盖的折叠和嵌套的折叠都被删除.

仅当 ‘foldmethod‘ 设为 "manual" 或 "marker" 时有效.

参考 |fold-delete-marker|.

*zE* *E352*

zE        除去 (Eliminate) 窗口里所有的折叠.

仅当 ‘foldmethod‘ 设为 "manual" 或 "marker" 时有效.

参考 |fold-delete-marker|.

打 开 和 关 闭 折 叠 ~

一个小于 ‘foldminlines‘ 的折叠的显示就象它被打开时一样.所以,以下的命令对于小

折叠所起的作用与描述不同.

*zo*

zo        打开 (open) 在光标下的折叠.当给定计数时,相应深度的折叠被打

开.在可视模式下,所选区域的所有行的折叠被打开一级.

*zO*

zO        循环打开 (Open) 光标下的折叠.不在光标下的折叠不改变.

在可视模式下,打开所有的在选中区域里的折叠,包括被部分选中的.

*zc*

zc        关闭 (close) 在光标下的折叠.当给定计数时,相应深度的折叠被关

闭.在可视模式下,所选区域里的所有行的折叠被关闭一级.

‘foldenable‘ 被设定.

*zC*

zC        循环关闭 (Close) 在光标下的所有折叠.不在光标下的折叠不改变.

在可视模式下,关闭所有的在选中区域里的折叠,包括被部分选中的.

‘foldenable‘ 被设定.

*za*

za        当光标位于一关闭的折叠上时,打开之.当折叠嵌套时,你可能需要用

"za" 数次.当给定计数时,打开相应数量的被关闭的折叠.

当光标位于一打开的折叠上时,关闭之且设定 ‘foldenable‘ .这仅关

闭一级折叠,因为再次使用 "za" 将再次打开折叠.当给定计数时,关

闭相应数量的折叠 (这不同于重复 "za" 许多次).

*zA*

zA        当处在一关闭的折叠上时,循环地打开折叠.

当处在一打开的折叠上时,循环地关闭折叠且设定 ‘foldenable‘.

*zv*

zv        查看 (view) 光标所在的行: 仅打开足够的折叠使光标所在的行不被折

叠.

*zx*

zx        更新折叠: 撤消被手工打开和关闭的折叠: 再次应用 ‘foldlevel‘.

然后使用 "zv" : 查看光标所在行.

同时强制重新计算折叠.使用 "foldexpr" 并且缓冲区发生改变但折叠

不能正确地更新时,这会有用.

*zX*

zX        手工恢复被打开和关闭的折叠: 再次应用 ‘foldlevel‘.

也同时强制重新计算折叠,同 |zx|.

*zm*

zm        折起更多 (more): ‘foldlevel‘ 减 1.如果 ‘foldlevel‘ 已经为 0,

则不会被减小.

‘foldenable‘ 被设定.

*zM*

zM        关闭所有折叠: ‘foldlevel‘ 设为 0.

‘foldenable‘ 被设定.

*zr*

zr        减少 (reduce) 折叠: ‘foldlevel‘ 加 1.

*zR*

zR        打开所有的折叠.‘foldlevel‘ 设为最高级别.

*:foldo* *:foldopen*

:{range}foldo[pen][!]

在 {range} 内打开折叠.当加上 [!] 时,所有的折叠都被打开.对查

看在 {range} 内的所有文本很有用.没有 [!] 时,打开一级折叠.

*:foldc* *:foldclose*

:{range}foldc[lose][!]

在 {range} 内关闭折叠.当加上 [!] 时,所有的折叠都被关闭.对隐

藏在 {range} 内的所有文本很有用.没有 [!] 时,关闭一级折叠.

*zn*

zn        不折叠 (none): 复位 ‘foldenable‘.所有的折叠被打开.

*zN*

zN        正常折叠 (normal): 设定 ‘foldenable‘.所有的折叠都展现它们之前

的样子.

*zi*

zi        翻转 ‘foldenable‘ 的值.

在 折 叠 间 移 动 ~

*[z*

[z        到当前打开的折叠的开始.如果已在开始处,移到包含这个折叠的折叠

开始处.如果没有包含它的折叠,命令执行失败.

当给定计数,重复此命令 [count] 次.

*]z*

]z        到当前打开的折叠的结束.如果已在结束处,移到包含这个折叠的折叠

结束处.如果没有包含它的折叠,命令执行失败.

当给定计数,重复此命令 [count] 次.

*zj*

zj        向下移动.到达下一个折叠的开始处.关闭的折叠也被计入.

当给定计数,重复此命令 [count] 次.

此命令可在 |operator| 后使用.

*zk*

zk        向上移动到前一折叠的结束处.关闭的折叠也被计入.

当给定计数,重复此命令 [count] 次.

此命令可在 |operator| 后使用.

对 折 叠 执 行 命 令 ~

:[range]foldd[oopen] {cmd}            *:foldd* *:folddoopen*

对所有不在关闭的折叠中的行执行 {cmd}.

给定 [range] 时,仅对范围内那些行起作用.

每次命令被执行时,光标会被定位在要被操作的行上.

就如 ":global" 命令: 首先标记出所有不在关闭的折叠中的行.然后

对所有标记过的行,执行 {cmd}.所以当 {cmd} 改变了文本的折叠

时,对命令执行的位置没有影响 (当然,删除行例外).

如: >

:folddoopen s/end/loop_end/ge

<        使用标志位 "e" 避免了当 "end" 不匹配时得到错误消息.

:[range]folddoc[losed] {cmd}            *:folddoc* *:folddoclosed*

对所有在关闭的折叠里的行,执行 {cmd}.

其它同 ":folddoopen" 命令.

==============================================================================

3. 折叠选项                    *fold-options*

颜 色                            *fold-colors*

对关闭的折叠的颜色的设定由 Folded 高亮组 |hl-Folded| 决定.对折叠栏的颜色的设

定由 FolderColumn 高亮组 |hl-FoldColumn| 决定.

下面是设定颜色的例子: >

:highlight Folded guibg=grey guifg=blue

:highlight FoldColumn guibg=darkgrey guifg=white

<

折 叠 级 别                        *fold-foldlevel*

‘foldlevel‘ 是个数值选项: 数字越大则打开的折叠更多.

当 ‘foldlevel‘ 为 0 时,所有的折叠关闭.

当 ‘foldlevel‘ 为正数时,一些折叠关闭.

当 ‘foldlevel‘ 很大时,所有的折叠打开.

‘foldlevel‘ 的改变后立即生效.之后,折叠可以被手动地打开和关闭.

当其值增大,在新级别 (译者注: 旧级别?) 之上的折叠被打开.手工打开的折叠不会被

关闭.

当其值减小,在新级别之上的折叠被关闭.手工关闭的折叠不会被打开.

折 叠 文 本                        *fold-foldtext*

‘folftext‘ 是个字符串选项,定义了一个表达式.这个表达式被用来求得关闭折叠所显

示的文字.如: >

:set foldtext=v:folddashes.substitute(getline(v:foldstart),‘/\\*\\\|\\*/\\\|{{{\\d\\=‘,‘‘,‘g‘)

显示了折叠的第一行,除去其中的 "/*"、"*/" 和 "{{{" .

备注: 使用反斜杠是为了避免一些字符被 ":set" 命令解释.使用一个函数更简单: >

:set foldtext=MyFoldText()

:function MyFoldText()

:  let line = getline(v:foldstart)

:  let sub = substitute(line, ‘/\*\|\*/\|{{{\d\=‘, ‘‘, ‘g‘)

:  return v:folddashes . sub

:endfunction

‘foldtext‘ 的计算是在沙盘 |sandbox| 里完成的.其中的当前窗口设为要显示该行的窗

口.错误被忽略.

默认值是 |foldtext()|.对于大多数类型的折叠它可以返回适合的文字.如果你不喜欢

它,你可以自己指定 ‘foldtext‘ 表达式.可以使用以下这些 Vim 变量:

v:foldstart    折叠首行的行号

v:foldend    折叠末行的行号

v:folddashes    一个含有连字符的字符串,用来表示折叠级别

v:foldlevel    折叠级别

在结果中,制表符被替换为空格,而不可显示的字符被替换为可显示的字符.

结果行被截短以适合窗口的宽度,永远不会回绕.

当在文字后有空余时,用 ‘fillchars‘ 来填充.

备注: 对那些 ":set" 命令作特殊处理的字符在其前面须加上反斜杠.如: 空格,反斜杠

和双引号. |option-backslash|

折 叠 栏                        *fold-foldcolumn*

‘foldcolumn‘ 是个数字,它设定了在窗口的边上表示折叠的栏的宽度.当为 0 时,没有

折叠栏.一个普通值是 4 或 5.最小可用的值是 2,不过 1 仍然可以提供一些信息.最

大是 12.

一个打开的折叠由一栏来表示,顶端是 ‘-‘,其下方是 ‘|‘.这栏在折叠结束的地方结

束.当折叠嵌套时,嵌套的折叠出现在被包含的折叠右方一个字符位置.

一个关闭的折叠由 ‘+‘ 表示.

当折叠栏太窄而不能显示所有折叠时,显示一数字来表示嵌套的级别.

在折叠栏点击鼠标,可以打开和关闭折叠:

- 点击 ‘+‘ 打开在这行的关闭折叠

- 在任何其他非空字符上点击,关闭这行上的打开折叠

其 他 选 项

‘foldenable‘  ‘fen‘:    复位时打开所有折叠.

‘foldexpr‘    ‘fde‘:    用于 "expr" 折叠的表达式.

‘foldignore‘  ‘fdi‘:    用于 "indent" 折叠的字符.

‘foldmarker‘  ‘fmr‘:    用于 "marker" 折叠的标志.

‘foldmethod‘  ‘fdm‘:    当前折叠方法.

‘foldminlines‘ ‘fml‘:    关闭折叠的最小显示行数.

‘foldnestmax‘ ‘fdn‘:    用于 "indent" 和 "syntax" 折叠的最大嵌套层数.

‘foldopen‘    ‘fdo‘:    哪一种命令可以打开关闭的折叠.

‘foldclose‘   ‘fcl‘:    当光标不在折叠上时关闭折叠.

==============================================================================

4. 折叠行为                        *fold-behavior*

当上下移动和滚动时,光标将移至连续折叠的行的第一行.当光标已在被折叠的行上时,

它移动到下一个没有被折叠的行上,或下一个关闭的折叠.

当光标在被折叠的行上时,光标总是显示在第一列.标尺显示确切的光标位置.光标本应

也在实际位置显示的,但因为被折叠而无法做到.

许多移动命令处理连续被折叠的行就象处理空行一样.如,"w" 命令只在首列停一次.

在插入模式下,光标所在的行不会被折叠.这让你看得见你键入的内容.

当使用操作符时,一个关闭的行被作为整体处理.所以 "dl" 在光标下删除了整个关闭的

折叠.

对 Ex 命令的执行范围被调整,使得它总是从关闭折叠的第一行开始,在关闭折叠的最后

一行结束.所以,命令: >

:s/foo/bar/g

当光标在关闭的折叠上时,它将在整个折叠里用 "bar" 替换 "foo".

不过 |:folddoopen| 和 |:folddoclosed| 的操作并非如此.

编辑一个已经被编辑过的缓冲区时,上次被使用的折叠设置会被再次使用.对手工定义折

叠方式,已经被定义的折叠会被恢复.对所有的折叠方式,手工打开和关闭的折叠会被恢

复.如果这个缓冲区曾经在这个窗口里被编辑,过去用的值被恢复.否则,来自该缓冲区

最近一次编辑的窗口值被使用.

==============================================================================

统计单词数、行数等 *count-items*

如果需要统计缓冲区中一个模式 (pattern) 出现的频率,使用 substitute 命令并加入

‘n‘ 标志位以避免实际的替代.Vim 报告的已替代的数目就是模式出现的次数.例: >

:%s/./&/gn字符数

:%s/\i\+/&/gn单词数

:%s/^//n行数

:%s/the/&/gn任何地方出现的 "the"

:%s/\<the\>/&/gn作为单词出现的 "the"

你可能希望复位 ‘hlsearch‘ 或者使用 ":nohlsearch".

如果你希望没有匹配的时候不显示错误,那么增加标志位 ‘e‘.

另一种办法就是在可视模式下使用 v_g_CTRL-G.

=========================================

*08.3* 调整窗口大小

:split 命令可以接受计数前缀.如果指定了这个前缀,这个数将作为窗口的高度.例如

如下命令可以打开一个三行的窗口并编辑文件 alpha.c:

>

:3split alpha.c

对于已经打开的窗口,你可以用有几种方法改变它的大小.如果你有鼠标,很简单: 把鼠

标指针移到分割两个窗口的状态栏上,上下拖动即可.

要扩大窗口:

>

CTRL-W +

要缩小窗口:

>

CTRL-W -

这两个命令接受计数前缀用于指定扩大和缩小的行数.所以 "4 CTRL-W +" 会使窗口增高

4 行.

要把一个窗口设置为指定的高度,可以用这个命令:

>

{height}CTRL-W _

就是先输入一个数值,然后输入 CTRL-W 和一个下划线 (在美式英语键盘中就是 Shift

加上 "-").

要把一个窗口扩展到尽可能大,可以使用无计数前缀的 CTRL-W _ 命令.

使 用 鼠 标

在 Vim 中,你可以用键盘很快完成很多工作.但很不幸,改变窗口大小要敲不少键.在

这种情况下,使用鼠标会更快一些.把鼠标指针移到状态条上,按住左键并拖动.状态条

会随之移动,这会使一个窗口更大一个更小.

选 项

‘winheight‘ 选项设置最小的期望窗口高度而 ‘winminheight‘ 选项设置最小的 "硬性"

高度.

同样,‘winwidth‘ 设置最小期望宽度而 ‘winminwidth‘ 设置最小硬性宽度.

‘equalalways‘ 选项使所有的窗口在关闭或者打开新窗口的时候总保持相同大小

时间: 2024-10-25 20:11:57

网上的一些vim指令的相关文章

Linux系统文本编辑器vim指令大全

本文适合Vim新手,既可阅读入门 相关在线资料http://baike.baidu.com/subview/113188/9338173.htm?fr=aladdin vim的使用之汇总   vimtutor (在线学习) 功能最强在的编辑器--vim vi是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,通过它可以编辑文件.当然,对UNIX系统略有所知的人,或多或少都觉得vi超级难用,但vi是最基本的编辑器,所以希望读者能好好把它学起来,以后在UNIX世界里必将畅行无阻.游刃有余,

每周多学几条vim指令--(1)

用vim也有一段时间了,感觉自己所用到的功能比较简单,而且有时编辑工作含大量重复. 好,每周熟悉新指令. gd -> 光标所在处有一个单词,这个指令的作用就是在整个文本高亮这个单词且可用n跳转到下一个 cc -> 清空当前行但不删除,可继续编辑 可视化选择: 创造反白区域: control + v → 块选择 v → 除了起始行外,其他行都是整行反白 有了反白区域后: V → 含反白区域的所有行反白 U →  变大写 u →  变小写 J →  把所有行连接起来,变成一行  (非可视化选择下的

常用 VIM 指令

vim 选择文本,删除,复制,粘贴   文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下: v    从光标当前位置开始,光标所经过的地方会被选中,再按一下v结束. V    从光标当前行开始,光标经过的行都会被选中,再按一下V结束. Ctrl + v   从光标当前位置开始,选中光标起点和终点所构成的矩形区域,再按一下Ctrl + v结束. ggVG 选中全部的文本, 其中gg为跳到行首,V选中整行,G末尾 选中后就可以用编辑命令对其进行编辑,如 d   删除 y   复制

[乱 入]几个实用的Vim指令

一.入门 传送门:<简明 Vim 练级攻略> 二.好东西(个人排名) No.1 viw 选中光标处的单词(眼前一亮) No.2 gd 光标所在属性或方法的定义处 No.3 yiw 复制光标处的单词(和No.1类似) No.3 * 和 # 向后 和 向前 找光标所在的关键词 No.4 C+n(即Ctrl + n) 补全功能 PS 还有一些常用的,但是容易发现的指令,就不列出来了. 版权声明:本文为博主原创文章,未经博主允许不得转载.

vim 指令学习

移动行: 命令:3 move 4 光标移动 H : 左移 J :下移 K :上移 L : 右移 0: 移到行首 $ :移到行尾 :n :定位到某一行

vim配置强悍来袭

vim   这个关键字,我不想再过多的解释,相信看到这里的同仁,对vim都有十七八分的理解,如果你还不知道vim是什么,自己找个黑屋子... 废话不多说,今天在这里主要说vim的,不带插件的配置,也就是最简洁的跨平台编辑器: 先说明我的系统及版本:如图: 我们一步步来说: 配置之前,系统需要先有vim, 方法如下: ubuntu系统: 普通用户下输入命令:sudo apt-get install vim-gtk centos系统: 普通用户下输入命令:yum -y install vim* 1.

[工欲善其事,必先利其器] -- VIM 学习篇

学习vim就像学弹钢琴一样,一旦学会,受益无穷. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~正文内容~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 要想熟练掌握一个工具,最好的办法就是多练习.对VIM初学者而言,最有效又便捷的方式莫过于使用vimtutor. vimtutor 是vim自带教程,编写得短小精悍,十分易懂.如同有人手把手教你学骑自行车一样,通过阅读并按照其中的指示操作,每天花30分按每一课的指示操作一遍,三天反复必然能熟练使用. 对于进

Vim,极简使用教程,让你瞬间脱离键鼠切换的痛苦

写之前,脑子里觉得可以最常用操作的来熟悉Vim,内容不多,写了一半确发现,即使是最常用的操作,讲完也要写好多,已经不能叫什么极简教程了,不过既然写了,就这样吧 都说Vim很难学,是的,相对于鼠标来讲,肯定是超难学了.但它的好处真的非常多,特别是对于敲代码的同学.关于这些问题,今天就不讨论了,这里主要说的是,只要记住小小的一部分操作,就可以很轻松的使用Vim,仍然可以极大的提高敲代码的效率哦. 网上很多介绍Vim的文章,都在介绍它强大的操作,其实加大了学习的难度,我简单的总结了一下,要使用Vim只

[Linux] PuTTY指令汇总(持续更新中...)

写在前面: 以前真心没有玩过Linux系统,总感觉整天摆弄Linux的同学都是大牛.如今,在公司里实习需要远程登录Linux服务器,所有的代码都要在开发板上完成,所以被逼无奈也不得不定下心来好好学学Linux系统的各种操作.我现在用的远程登录软件是PuTTY,所以简单总结一下常用的PuTTY指令,方便以后进行查阅. 1. PuTTY介绍 随着Linux在服务器端应用的普及,Linux系统管理越来越依赖于远程.在各种远程登录工具中,PuTTY是出色的工具之一.PuTTY是一个免费的.Windows