国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

linux vi 操作總結(jié)

2016-08-11 07:13:23 7425

Vim/Vi 沒有菜單,只有命令

Vim/Vi 工作模式介紹:
插入模式 和  命令模式 是vi的兩個(gè)基本模式。
——插入模式 ,是用來編寫文本內(nèi)容的。
——命令模式,是用來編輯文本,如上下翻頁等,復(fù)制粘貼,跳?到指定行等操作
當(dāng)前編輯的頂部或者底部會(huì)顯示vim處于何種模式下。如:mode:COMMAND!

進(jìn)入和退出vim編輯器:
進(jìn)入   vi filename(要編輯的文件名字)———>進(jìn)入了命令模式
命令模式——>輸入  :wq——>退出

保存退出
:wq      保存修改并退出
ZZ      快捷鍵,保存修改并退出(前面沒有冒號)
:q!        不保存退出

:wq!    強(qiáng)行保存退出,(文件所屬者科忽略文件的制度屬性)
:w        保存不退出
:wqa     保存所有文件
:w  new_filename  另存為指定文件

vim配置文件    所在目錄~/.vimrc
1.修改配置文件時(shí),可以不用加:
2.可將編輯模式下的命令寫在里面,每個(gè)命令單獨(dú)一行,這樣每次啟動(dòng)時(shí),會(huì)自動(dòng)執(zhí)行里面的命令。

~   home directory
root   /root
users  /home     zhangsan   /home/zhamgsan

命令模式——>輸入i(或者ao) ——> 插入模式
i     insert

還可以輸入其他的字母,來進(jìn)入插入模式:

___________________________________________________________________________-
插入命令
命令                    作用
a                     在光標(biāo)后附加文本
A                     在本行行末附加文本
i                     在光標(biāo)前插入文本
I                     在本行開始插入文本
o (字母)              在光標(biāo)下插入新行
O (字母)              在光標(biāo)上插入新行

插入模式———> ESc鍵———>命令模式          http://www.tjdsmy.cn/?p=801
如果要保存文件,就要從插入模式切換為命令模式才行

命令模式——>: ——> 編輯模式
編輯模式———>命令行回車結(jié)束運(yùn)行——>命令模式
在編輯模式執(zhí)行完命令后,會(huì)自動(dòng)回到命令模式

——————————————————————————————
定位命令
命令                        作用
h、方向左鍵            左移一個(gè)字符
j、 方向下鍵            下移一行
k、方向上鍵            上移一行
l、 方向右鍵            右移一個(gè)字符
$                           移至行尾
0                            移至行首
_______________________________________
H                            移至屏幕上端
M                            移至屏幕中央
L                            移至屏幕下端
(                        (左小括號)移動(dòng)到上一個(gè)句子首
)                        (右小括號)移動(dòng)到下一個(gè)句子首
{                        (左大括號)移動(dòng)到上一個(gè)段落首
}                        (右大括號)移動(dòng)到下一個(gè)段落首

快速定位,括號匹配, %
在command模式下。當(dāng)文本中存在  (  ,{  ,[  ,等符號時(shí)可以通過輸入  % (就是按shift鍵和數(shù)字5鍵)  來跳到括號對應(yīng)的位置

[[                        光標(biāo)跳轉(zhuǎn)到代碼塊開頭即{處,要求{獨(dú)占一行
gD                        光標(biāo)跳轉(zhuǎn)到局部變量定義處
''                        (兩個(gè)單引號)光標(biāo)跳轉(zhuǎn)到上次??刻?/p>

————————————————————————————
快速定位   ,行頭與行尾 0 與 $
在command模式下,
命令                                作用

0(數(shù)字0鍵)                            移至行首(把光標(biāo)移至當(dāng)前行的起始位置,第一個(gè)非空白字符之前,簡單點(diǎn)說就是^ 的前面)
^(尖角號)                               把光標(biāo)移至當(dāng)前行的起始位置,也即當(dāng)前行的第一個(gè)非空白字符位置
<HOME> 移動(dòng)到本行第一個(gè)字符。同0健。

$(就是按shift鍵和數(shù)字4鍵)            移至行尾
n$         移動(dòng)到下面(包括光標(biāo)所在行)n行的行尾。

—————————————————————————-
單個(gè)詞組操作光標(biāo)移動(dòng)命令:

命令                        作用

W (大寫)                       移動(dòng)到下一個(gè)單詞的首位置(如果連個(gè)單詞直接有 逗號連接,則認(rèn)為是一個(gè)單詞)
w(小寫)                            將光標(biāo)右移一個(gè)單詞的首位置。光標(biāo)停留在下一個(gè)單詞的首位置(兩單詞有逗號相連,則認(rèn)為逗號也是一個(gè)單詞),注意:如果已到行尾,則轉(zhuǎn)至下一行行首
nw                    向左移動(dòng)n個(gè)單詞,光標(biāo)停在單詞的首位置
e                        移動(dòng)到單詞末尾(把光標(biāo)移至當(dāng)前所在單詞(或下一個(gè)單詞)的最后一個(gè)字符位置)
ne                    和nw類似,只不過光標(biāo)停留在單詞的尾部
E                            和小寫用法一樣,只是以空格字符作為字的分隔符。
nE
b                        移動(dòng)到單詞的頭部(如果光標(biāo)已經(jīng)在單詞的頭部,則將光標(biāo)左移一個(gè)單詞。光標(biāo)停留在下一個(gè)單詞的字首位置)
nb                    和nw類似,只不過這是向右移動(dòng)
B         將光標(biāo)左移一個(gè)單詞,只是以空格字符作為字的分隔符。光標(biāo)停留在下一個(gè)單詞的單詞首位置位置(如果連個(gè)單詞直接有 逗號連接,則認(rèn)為是一個(gè)單詞)
nB

注意:上面這些命令都使用’iskeyword‘選項(xiàng)中的字符來確定單詞的分界,還有幾個(gè)命令,只把空白字符當(dāng)做”單詞“的分界。當(dāng)然,這里說的” 單詞“已經(jīng)不是傳統(tǒng)意義上的單詞了,而是由非空白字符構(gòu)成一串字串。命令”W“移動(dòng)光標(biāo)到下個(gè)字串的開始,命令”B“移動(dòng)到上個(gè)字串的開始;命令”E“移 動(dòng)到下個(gè)字串的結(jié)尾,命令”gE“移動(dòng)到上個(gè)字串的結(jié)尾。和上面的命令比較一下,發(fā)現(xiàn)什么規(guī)律沒有?

————————————————————————————
多個(gè)詞組光標(biāo)移動(dòng):
上面我們掌握了單個(gè)詞組的移動(dòng),如果需要移動(dòng)多個(gè)詞組的光標(biāo),只需要在使用前加上要移動(dòng)的詞組的個(gè)數(shù)即可。一個(gè)英文字母的寬度是1,兩個(gè)字母的寬度等?一個(gè)漢字的寬度。
舉例如下:
Example : ABC   DEF   GHI   JKL   MNO   PQR   STUVW
假設(shè)光標(biāo)現(xiàn)在處于Example的E處。并且vim處于command模式。那么我們先按 數(shù)字3鍵 ,再按w鍵。光標(biāo)就會(huì)跳到JKL的J處。

————————————?———————————-
vim重復(fù)輸入文本:
舉例:我們要輸入gogogo。
方法如下:
vim在COMMAND模式下,先按數(shù)字3鍵,然后按 i鍵,在輸入go,再按Esc鍵。就可以輸入gogogo了。

還有,如將數(shù)字加在命令前,標(biāo)示該命令處理幾次,如5dd標(biāo)示執(zhí)行5次dd(刪除光標(biāo)所在整行)操作。
.   (英文句號)為命令重復(fù)命令,按下一次執(zhí)行一次上一次執(zhí)行過的命令。

————————————————————————————
快速定位,行頭與行尾 0 與 $
在command模式下,
命令                                作用
$(就是按shift鍵和數(shù)字4鍵)            移至行尾
0(數(shù)字0鍵)                            移至行首(把光標(biāo)移至當(dāng)前行的起始位置,第一個(gè)非空白字符之前,簡單點(diǎn)說就是^ 的前面)
^(尖角號)                               把光標(biāo)移至當(dāng)前行的起始位置,也即當(dāng)前行的第一個(gè)非空白字符位置

————————————————————————————————
快速行定位,跳到指定的行, g 與 G

命令                        作用
:set nu                設(shè)置行號
:set nonu            去想行號

:set nu!                        取消顯示行號
gg                        到第一行
G                            到最后一行
nG                        到第n行
:n                        到第n行

Ctrl + e 向下滾動(dòng)一行

Ctrl + y 向上滾動(dòng)一行

Ctrl + d 向下滾動(dòng)半屏

Ctrl + u 向上滾動(dòng)半屏

Ctrl + f 向下滾動(dòng)一屏

Ctrl + b 向上?動(dòng)一屏

—————————————————————————-
快速定位,字母查找 f 與 F:
在command模式下,通過按  f 或者 F   快速定位內(nèi)容。(不需要輸入冒號)
命令                        作用
f                            想后查找
F                            向前查找
可以結(jié)合數(shù)字來進(jìn)行多次查找,如按下  3fq   ,就會(huì)放下查找第三個(gè)q
如果不加數(shù)字,如   fq    ,就會(huì)向后查找第一個(gè)q

——————————————————--——————
查找光標(biāo)下的相同詞組, * 與 #
通過  *  ,可以往后查找光標(biāo)停留位置相同的詞組。  #  是向前超找
舉例:假設(shè)光標(biāo)停留在第一個(gè)if處
if  we are god   if you are human

我們在command模式下,輸入  *  ,光標(biāo)就會(huì)跳到“if you are human”的那個(gè)if上去

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

字符替換
命令模式下
r                        (小寫)替換光標(biāo)所在處一個(gè)字符,如ra,就是將當(dāng)前光標(biāo)所在處字符替換為a
R                        (大寫)開始替換,直到按ESC鍵退出替換,相當(dāng)于按下鍵盤上到insert鍵
cc                        (小寫)取代光標(biāo)所在整行
S                        (大寫)與ss(小寫)效果相同
C                        (大寫)取代到行尾,包括光標(biāo)處字符
c0                        (小寫,數(shù)字0)取代到行首,不包括光標(biāo)處字符
c^                        (小寫)與c0(小寫,數(shù)字0)效果相同

___字符串單詞搜索和替換命令______________________________________

#命令模式下

命令                            作用
/string                        向前搜索指定字符串

?string        從光?處開始向上開始查找字符從string
vim中有一些特殊字符在查找時(shí)需要轉(zhuǎn)義  .*[]^%/?~$
set  ic              查找時(shí),忽略大小寫
set noic         查找時(shí),不忽略大小寫
:nohlsearch  關(guān)閉當(dāng)前的高亮顯示,如果再次搜索或者按下n或N鍵,則會(huì)再次高亮。

:set incsearch  逐步搜索模式,對當(dāng)前鍵入的字符進(jìn)行搜索而不必等待鍵入完成。

:set wrapscan  重新搜索,在搜索到文件頭或尾時(shí),返回繼續(xù)搜索,默認(rèn)開啟。

n                                查找模式下,搜索指定字符串的下一個(gè)出現(xiàn)位置
N                                查找模式下,往上找指定字符串出現(xiàn)的位置
s/old/new/ 用old替換new,替換當(dāng)前行的第一個(gè)匹配
s/old/new/g 用old替換new,替換當(dāng)前行的所有匹配
:%s/old/new/                 用old替換new,替換所有行的第一個(gè)匹配
:%s/old/new/g            全文替換指定字符串
:n1 ,n2s/old/new/g    ?一定范圍內(nèi)替換指定字符串
若將g改為c,就會(huì)詢問是否替換。在替換文本old或new中有特殊字符,如“/”等,都需要用進(jìn)行轉(zhuǎn)義

貼上兩篇關(guān)于vim替換的文章:

語法為 :[addr]s/源字符串/目的字符串/[option]

全局替換命令為::%s/源字符串/目的字符串/g

[addr] 表示?索范圍,省略時(shí)表示當(dāng)前行。

如:“1,20” :表示從第1行到20行;

“%” :表示整個(gè)文件,同“1,$”;

“. ,$” :從當(dāng)前行到文件尾;

s : 表示替換操作

[option] : 表示操作類型

如:g 表示全局替換;

c 表示進(jìn)行確認(rèn)

p 表示替代結(jié)果逐行顯示(Ctrl + L恢復(fù)屏幕);

省略option時(shí)僅對每行第一個(gè)匹配串進(jìn)行替換;

如果在源字符串和目的字符串中出現(xiàn)特殊字符,需要用””轉(zhuǎn)義

下面是一些例子:

#將That or this 換成 This or that
:%s/(That) or (this)/u2 or l1/
—-
#將句尾的child換成children
:%s/child([ ,.;!:?])/children1/g
—-
#將mgi/r/abox換成mgi/r/asquare
:g/mg([ira])box/s//mg//my1square/g    <=>  :g/mg[ira]box/s/box/square/g
—-
#將多個(gè)空格換成一個(gè)空格
:%s/  */ /g
—-
#使用空格替換句號或者冒號后面的一個(gè)或者多個(gè)空格
:%s/([:.])  */1 /g
—-
#刪除所有空行
:g/^$/d
—-
#刪除所有的空白行和空行
:g/^[  ][  ]*$/d
—-
#在每行的開始插入兩個(gè)空白
:%s/^/>  /
—-
#在接下來的6行末尾加入.
:.,5/$/./
—-
#顛倒文件的行序
:g/.*/m0O  <=> :g/^/m0O
—-
#尋找不是數(shù)字的開始行,并將其移到文件尾部
:g!/^[0-9]/m$ <=> g/^[^0-9]/m$
—-
#將文件的第12到17行內(nèi)容復(fù)制10詞放到當(dāng)前文件的尾部
:1,10g/^/12,17t$
~~~~重復(fù)次數(shù)的作用
—-
#將chapter開始行下面的第二行的內(nèi)容寫道begin文件?
:g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$第二篇:vi/vim 中可以使用 :s 命令來替換字符串。該命令有很多種不同細(xì)節(jié)使用方法,可以實(shí)現(xiàn)復(fù)雜的功能,記錄幾種在此,方便以后查詢。:s/vivian/sky/ 替換當(dāng)前行第一個(gè) vivian 為 sky:s/vivian/sky/g 替換當(dāng)前行所有 vivian 為 sky:n,$s/vivian/sky/ 替換第 n 行開始到最后一行中每一行的第一個(gè) vivian 為 sky:n,$s/vivian/sky/g 替換第 n 行開始到最后一行中每一?所有 vivian 為 sky


n 為數(shù)字,若 n 為 .,表示從當(dāng)前行開始到最后一行

:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替換每一行的第一個(gè) vivian 為 sky

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

可以使用 # 作為分隔符,此時(shí)中間出現(xiàn)的 / 不會(huì)作?分隔符

:s#vivian/#sky/# 替換當(dāng)前行第一個(gè) vivian/ 為 sky/

:%s+/oradata/apras/+/user01/apras1+ (使用+ 來 替換 / ): /oradata/apras/替換成/user01/apras1/

1.:s/vivian/sky/ 替換當(dāng)前行第一個(gè) vivian 為 sky

:s/vivian/sky/g 替換當(dāng)前行所有 vivian 為 sky

2. :n,$s/vivian/sky/ 替換? n 行開始到最后一行中每一行的第一個(gè) vivian 為 sky

:n,$s/vivian/sky/g 替換第 n 行開始到最后一行中每一行所有 vivian 為 sky

(n 為數(shù)字,若 n 為 .,表示從當(dāng)前行開始到最后一行)

3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替換每一行的第一個(gè) vivian 為 sky

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

4. 可以使用 # 作為分隔符,此時(shí)中間出現(xiàn)的 / 不會(huì)作為分隔符

:s#vivian/#sky/# 替換當(dāng)前行第一個(gè) vivian/ 為 sky/

5. 刪除文本中的^M

問題描述:對于換行,window下用回車換行(0A0D)來表示,linux下是回車(0A)來表示。這樣,將window上的文件拷到unix上用時(shí),總會(huì)有個(gè)^M.請寫個(gè)用在unix下的過濾windows文件的換行符(0D)的shell或c程序。

。 使用命令:cat filename1 | tr -d “^V^M” > newfile;

。 使用命令:sed -e “s/^V^M//” filename > outputfilename.需要注意的是在1、2兩種方法中,^V和^M指的是Ctrl+V和Ctrl+M.你必須要手工進(jìn)行輸入,而不是粘貼。

。 在vi中處理:首先使用vi打開文件,然后按ESC鍵,接著輸入命令:%s/^V^M//.

。 :%s/^M$//g

如果上述方法無用,則正確的解決辦法是: [Page]

。 tr -d "\r" < src >dest

。 tr -d "\015" dest

。 strings A>B
6. 替換確認(rèn)
我們有很多時(shí)候會(huì)需要某個(gè)字符(串)在文章中某些位置出現(xiàn)時(shí)被替換,而其它位置不被替換的有選擇的操作,這就需要用戶來進(jìn)行確認(rèn),vi的查找替換同樣支持
例如
:s/vivian/sky/g 替換當(dāng)前行所有 vivian 為 sky
在命令后面加上一個(gè)字母c就可以實(shí)現(xiàn),即:s/vivian/sky/gc
顧名思意,c是confirm的縮寫

7. 其它

利用 :s 命令可以實(shí)現(xiàn)字符串的替換。具體的用法包括:

:s/str1/str2/ 用字符串 str2 替換行中首次出現(xiàn)的字符串 str1

:s/str1/str2/g 用字符串 str2 替換行中所有出現(xiàn)的字符串 str1

:。,$ s/str1/str2/g 用字符串 str2 替換正文當(dāng)前行到末尾所有出現(xiàn)的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替換正文中所有出現(xiàn)的字符串 str1

:g/str1/s//str2/g 功能同上

從上述替換命令可以看到:g 放在命令末尾,表示對搜索字符串的每次出現(xiàn)進(jìn)行替換;不加 g,表示只對搜索

字符串的首次出現(xiàn)進(jìn)行替換;g 放在命令開頭,表示對正文中所有包含搜索字符串的行進(jìn)行替換操作

(原文地址: http://www.tjdsmy.cn/logs/28117977.html)

 

ddp                     交換光標(biāo)所在行和其下緊鄰的一行(dd剪切當(dāng)前行,p粘貼)

*                        向下完整匹配 光標(biāo)所在處  的單詞
#                        向上完整匹配 光標(biāo)所在處 的單詞
g*                        向下部分匹配 光標(biāo)所在處  的單詞
g#                        向上部分匹配 光標(biāo)所在處  的單詞

轉(zhuǎn)載請表明出處http://www.tjdsmy.cn/?p=801

_________________________________________
命令                        作用
r                         取代光標(biāo)所在處字符
R                         從光標(biāo)所在處開始替換字符,按Esc結(jié)束

R命令會(huì)將鍵盤所輸入內(nèi)容逐個(gè)覆蓋光標(biāo)所在處以后的字符

___________________________________________________
刪除命令/剪切命令
命令                        作用
x                       刪除光標(biāo)右邊的字符
nx                      刪除光標(biāo)所在處左邊n個(gè)字符
X                        刪除光標(biāo)左邊的字符
nX                        刪除光標(biāo)左邊n個(gè)文字
d                         用于剪切刪除文字
dl                         刪除當(dāng)前字符, dl=x
dh                     刪除前一個(gè)字符
dw                        刪除光標(biāo)之后的單詞剩余部分,如果光標(biāo)在單詞字首位置,則刪除光標(biāo)右邊第一個(gè)單詞
dnw                        刪除光標(biāo)之后的單詞剩余部分和n個(gè)單詞。如果光標(biāo)在單詞字首位置,則刪除光標(biāo)后面n個(gè)單詞
db                        刪除到某個(gè)單詞的開始位置
de                        刪除一個(gè)單詞
dne                        刪除光標(biāo)后面n個(gè)單詞
dd                      刪除光標(biāo)所在行,ndd刪除n行
ndd                     刪除光標(biāo)所在行向下 n 行,例如 20dd 則是刪除 20 行(常用)
dj                           刪除上一行
dk                        刪除下一行
dG                      刪除光標(biāo)所在行到文件末尾的內(nèi)容
d1G                    刪除光標(biāo)所在行到第一行的所有數(shù)據(jù)
dgg                        刪除當(dāng)前行到文件首部的所有行(包括當(dāng)前行)
jdG                     刪除當(dāng)前行之后所有行(包括當(dāng)前行)

D                       刪除當(dāng)前字符至行尾,D=d$
d$                          與D效果相同
d0                           是數(shù)字0)刪除到行首,不包含光標(biāo)處的字符
d^                                與d0效果相同
:n,$d                     刪除n行及以后所有的行
:1,$d                     刪除所有行

: n1,n2d                刪除n1行到n2行之間的行
范例:
:6655,6665d

dl    刪除字符 (縮寫: "x")
diw    刪除內(nèi)含單詞
daw    刪除一個(gè)單詞
diW    刪除內(nèi)含字串 (見 |WORD|)

daW    刪除一個(gè)字串 (見 |WORD|)
dis   刪除內(nèi)含句子
das"   刪除一個(gè)句子
dib  刪除內(nèi)含 '(' ')' 塊
dab   刪除一個(gè) '(' ')' 塊
dip   刪除內(nèi)含段落
dap   刪除一個(gè)段落
diB    刪除內(nèi)含 '{ ' ' }' 大塊
"daB"    刪除一個(gè) '{ ' ' }' 大塊

___________復(fù)制剪切粘貼命令______________________________x
命令                        作用
yy、Y                        復(fù)制當(dāng)前行
nyy,nY                        復(fù)制當(dāng)前行一下n行(包括當(dāng)前行)
p、P                        粘貼在當(dāng)前光標(biāo)所在行下或行上
ddp                            交換當(dāng)前行和其下一行
dd                            剪切當(dāng)前行
ndd                            剪切當(dāng)前行一下n行(包括當(dāng)前行)
:1,10d             將1-10行剪切。利用p命令可將剪切后的內(nèi)容進(jìn)行粘貼。
:1, 10 m 20 將第1-10行移動(dòng)到第20行之后。

_____________________________________________________________________________

塊編輯

Ctrl+V 進(jìn)入塊選擇/塊編輯模式/塊選擇
LINUX下是Ctrl-v,但是在windows下的GVIM,Ctril-v是粘貼。所以,windows下按 Ctrl-q 進(jìn)入塊(列)編輯

v:字符選擇,會(huì)將光標(biāo)經(jīng)過的地方反白選擇
V:行選擇,會(huì)將光標(biāo)經(jīng)過的行反白選擇
[ctrl]+v:塊選擇,可以用長方形的方式來選擇數(shù)據(jù)
y:復(fù)制反白的地方
d:刪除反白的地方
p   粘貼到上一行
P(大寫的)   粘貼到下一行

$  將塊選擇中的每一行都擴(kuò)展至行尾
h  停止上面的狀態(tài)

Ixxx<Esc>  在被選中的塊的前面插入xxx

0Ixxx<Esc>  在被選中的塊的每一行的行首插入xxx
Axxx<Esc>  在被選中的塊?后面追加xxx

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

cxxx<Esc>  在被選中的塊中刪除被選中的塊并以xxx替代
Cxxx<Esc>  在被選中的塊中刪除被選中的塊一直到第一行行尾,并以xxx替代
rx    把被選中的塊中的所有字符都替換成x

~  交換大小寫
U  小寫變大寫
u  大寫變小寫

>  將被選中的塊向右移動(dòng)一個(gè)shift單位,空出來的地方填補(bǔ)空格
<  同上,但是是向左移動(dòng),但是移動(dòng)的單位同時(shí)受限于左邊的邊界

J  將下一行附在當(dāng)前行的末尾,本行的尾空格與下一行的頭空格全都只用一個(gè)空格代替
gJ  同上,但是不對原文本內(nèi)容做任何改動(dòng)

:read a.txt將a.txt讀入并放在當(dāng)前行的下一行
:$r  a.txt將a.txt讀入并放在當(dāng)前文件的最后
:0r  a.txt將a.txt讀入并放在當(dāng)前文件的最開始

:.,$w tmp將當(dāng)前行到最后一行寫入tmp文件中
:.,$w! tmp將當(dāng)前行到最后一行寫入tmp文件中,即使tmp已存在
:.write >>tmp將當(dāng)前行追加到tmp文件

gU  將字符變大寫
gUl  將當(dāng)前字符變大寫
gUw  將當(dāng)前字符至該word結(jié)束變大寫
gU$  將當(dāng)前字符至行尾變大寫
gUgU 將當(dāng)前整行變大寫,可省略為gUU

gu  將字符變小寫
gul  將當(dāng)前字符變小寫
guw  將當(dāng)前字符至該word結(jié)束變小寫
gu$  將當(dāng)前字符至行尾變小寫
gugu 將當(dāng)前整行變小寫,可省略為guu

g~  改變字符大小寫
g~l  改變當(dāng)前字符大小寫
g~w  改變當(dāng)前字符至該word結(jié)束大小寫
g~$  改變當(dāng)前字符至行尾大小寫
g~g~ 改變整行字符大小寫,可省略為g~~

:[range]![shell command] 以range范圍內(nèi)的文本作為輸入去執(zhí)行command命令,并將結(jié)果覆蓋寫回range中
或者用光標(biāo)移動(dòng)符代替:[range]

:read ![shell command] 運(yùn)行command并將輸出寫到當(dāng)前行的下面
:0r ![shell command]  同上,輸出被寫入文件開頭
:write ![shell command] 運(yùn)行command并將整個(gè)文件寫入到command的輸入
:.w ![shell command]  同上,只會(huì)將當(dāng)前行輸入給command

Ctrl+L 重繪屏幕

:%s/<four>/4/g 將文件中所有的單詞four替換成4

vim *.cpp
qq:%s/<GetResp>/GetAnswer/ge<Esc>:wnq9999@q 將所有cpp文件打開并把所有的GetResp單詞換成GetAnswer

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

g Ctrl+g 統(tǒng)計(jì)字?jǐn)?shù)(要統(tǒng)計(jì)某一塊具體的字?jǐn)?shù)可以使用visual模式)

K  查找man頁

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

————————————————————————————————
WINDOWS下的GVIM的塊選擇命令是:

在gvim(windows版)中,塊選擇的快捷鍵不是<Ctrl-v>,此快捷鍵為粘貼。
先按V(貌似可以不按v),在按組合鍵Ctrl-q,然后使用hjkl來移動(dòng)光標(biāo)選擇塊。

快速選擇多行,如果用 hjkl慢慢移動(dòng)就太慢了,所以,我們選擇多行,可以先輸入行號,然后輸入G(就是shift+g)。

一般的選擇模式為:v(小寫),此時(shí)會(huì)顯示:可視。

行選擇模式為:V(大寫),此時(shí)會(huì)顯示:可視-行。

最兇殘的塊選擇模式則為:<Ctrl-q>,此時(shí)會(huì)顯示:可視-塊。

如果希望批量插入注釋,則為以下操作順序:

1、移動(dòng)光標(biāo)到注釋塊的第一行。

2、按Esc進(jìn)入Normal模式。

3、按<Ctrl-q>進(jìn)入塊選擇模式。

4、用h、j、k、l 鍵向下移動(dòng)光標(biāo)(注意:這里只能用這四個(gè)鍵移動(dòng),不支持方向鍵)。

5、選中相應(yīng)的行后,按I(大寫)鍵。

6、輸入//,并按Esc鍵,完成注釋。

注意:gvim中ctrl +v 變成粘貼,如果你按下 Ctrl + v 沒能進(jìn)入列選擇模式,請看這里)是因?yàn)関im的設(shè)計(jì)者用了個(gè)mswin.vim,以此能夠使用windows的快捷鍵粘貼,撤銷等。但是這又會(huì)和vim本 身的快捷鍵沖突。http://www.tjdsmy.cn/html/vimrc_mswin.html  。
我們還可以通過注銷gvim的vimrc配置文件注銷與 mswin.vim相關(guān)的行,則可以直接使用ctrl+v進(jìn)入塊選擇模式

————————————————————————————-
重復(fù)執(zhí)行操作
很多時(shí)候一個(gè)操作,我們要執(zhí)行幾遍。通過   .    來進(jìn)行重復(fù)的操作
舉例:假設(shè)光標(biāo)在abc處。我們來重復(fù)刪除2個(gè)單詞:
abc  bdf   sdfe   erwer   eete   wer  uty

在command模式下,先輸入  d2w  ,然后   輸入  . (英文的句號)  ,就會(huì)不斷執(zhí)行刪除兩個(gè)單詞的操作,按多少次  .   就重復(fù)多少次

————————————————————————————————————————————
撤銷操作:
如果編輯文本輸錯(cuò)了,可在命令模式下按  u鍵  撤銷  和 ctrl+R  返回撤銷
u                         取消上一步操作(最多連續(xù)取消500次)

Ctrl+r                 恢復(fù)上一步被撤銷的操作
U              撤銷當(dāng)前一行的操作

—————————————————————————————————
自動(dòng)補(bǔ)齊

C-n      匹配下一個(gè)關(guān)鍵字
C-p      匹配上一個(gè)關(guān)鍵字

———————————————---------------------------
簡單排版
:ce(nter)                居中顯示光標(biāo)所在行
:ri(ght)                靠右顯示光標(biāo)所在行
:le(ft)                        靠左顯示光標(biāo)所在行
J                                將光標(biāo)所在下一行合并到光標(biāo)所在行
>>                                光標(biāo)所在行增加縮進(jìn)(一個(gè)tab)
<<                                光標(biāo)所在行減少縮進(jìn)(一個(gè)tab)
n>>                        光?所在行開始的n行增加縮進(jìn)
n<<                        光標(biāo)所在行開始的n行減少縮進(jìn)

——————————————————————————————————————————————
多tab|窗口拆分
:tabnew [++opt選項(xiàng)] [+cmd] 文件            建立對指定文件新的tab
:tabc       關(guān)閉當(dāng)前的tab
:tabo       關(guān)閉所有其他的tab
:tabs       查看所有打開的tab
:tabp      前一個(gè)
:tabn      后一個(gè)
關(guān)閉窗口
:close             最后一個(gè)窗口不能使用此命令,可以防止意外退出vim。
:q 如果是最后一個(gè)被關(guān)閉的窗口,那么將退出vim。

標(biāo)準(zhǔn)模式下:
gt , gT 可以直接在tab之間切換。
還有很多他命令, 看官大人自己, :help table 吧。

:new    水平切割窗口
:split    水平切割窗口(或者直接輸入   :sp  也可以)
:vsplit   垂直切割( 也可以  :vs  )
Ctrl+ww 移動(dòng)到下一個(gè)窗口
或者 先按組合鍵ctrl+w ,然后都松開,然后通過j/k/h/l(等于vim移動(dòng)的方向鍵) 來移動(dòng)大哦哦左/上/下/右的窗口
Ctrl+wj 移動(dòng)到下方的窗口

Ctrl+wk 移動(dòng)到上方的窗口

vim -o a.txt b.txt c.txt為每一個(gè)文件打開一個(gè)水平分割窗?
vim -O a.txt b.txt c.txt為每一個(gè)文件打開一個(gè)垂直分割窗口

:only  錄制宏。按q鍵加任意字母開始錄制,再按q鍵結(jié)束錄制(這意味著vim中的宏不可嵌套),使用的時(shí)候@加宏名,比如qa。。。q錄制名為a的宏,@a使用這個(gè)宏。

vim中的幾個(gè)文本對象:aw 一個(gè)單詞;  as 一個(gè)句子;  ap 一個(gè)段落

zfap 創(chuàng)建一個(gè)段落的折行

zc 關(guān)閉折行

zo 打開折行

———————————————————————————————————
vimdiff a.txt b.txt打開a.txt和b.txt并進(jìn)行比較(這個(gè)是shell中的命令)

:vertical diffsplit a.txt打開分割窗口用于比較當(dāng)前文件和a.txt
:set scrollbind同步滾動(dòng) noscrollbind不同步滾動(dòng)

qa  將后續(xù)命令錄制在寄存器a中(從a到z有26個(gè)可用)
q  停止錄制
@a  執(zhí)行寄存器a中錄制的命令
@@  執(zhí)行剛剛執(zhí)行過的寄存器中的命令
qA  向寄存器a中追加命令

"Ayy 將當(dāng)前行追加復(fù)制到寄存器A中

:[range]s+from+to+[flags] 把range范圍內(nèi)的from替換成to
:[range]s=from=to=[flags] 把range范圍內(nèi)的from替換成to
:[range]s/from/to/[flags] 把range范圍內(nèi)的from替換成to
range為空時(shí),只對當(dāng)前行有效
range為%時(shí),對所有行都有效
flags為空時(shí),只替換指定行的第一個(gè)from
flags有g(shù)時(shí),替換指定行的所有from
flags有c時(shí),要求用戶對每次替換進(jìn)行確認(rèn)
flags有p時(shí),要求:s命令列出所有改變的行
flags有e時(shí),要求:s命令在沒有找到任何匹配時(shí)也不要報(bào)錯(cuò)

:1,5s/from/to/g 把第1行到第5行中所有的from替換成to
:3s/from/to/g 把第3行中所有的from替換成to
:.write a.txt 把當(dāng)前行寫入a.txt
:.,$s/from/to/g 把當(dāng)前行到文件結(jié)束所有的from替換成to

:?^Chapter?,/^Chapter/s/from/to/g 把上一個(gè)Chapter到下一個(gè)Chapter之間的所有from替換成to
:.+3,$-5s/from/to/g 把當(dāng)前+3行到倒數(shù)第5行的全部from替換成to
:'a,'bs/from/to/g 把從a標(biāo)記的行到b標(biāo)記的行(包含a和b行)中全部from替換成to,注意是單引號不是倒引號

:[range]g/{pattern}/{command} 在range范圍內(nèi)找到匹配pattern的行然后執(zhí)行command命令
這里的command必須是:開頭的命令,而不能直接使用normal模式下的命令,除非使用|:normal|

————————————————————————————————————————--
~  改變光標(biāo)所?字符的大小寫,并將光標(biāo)移動(dòng)到下一個(gè)字符上

:edit foo.txt在vim中開始編輯另一個(gè)文件
:edit! foo.txt強(qiáng)制丟棄當(dāng)前未保存的修改
:next 轉(zhuǎn)到下一個(gè)文件,可以縮寫為:n
:next! 強(qiáng)制丟棄未保存的修改并轉(zhuǎn)到下一個(gè)文件
:wnext 保存當(dāng)前文件的修改并轉(zhuǎn)到下一個(gè)文件
:previous 轉(zhuǎn)到上一個(gè)文件
:wprevious 保存當(dāng)前文件的修改并轉(zhuǎn)到上一個(gè)文件
:last 轉(zhuǎn)到最后一個(gè)文件
:first 轉(zhuǎn)到第一個(gè)文件
:2next 轉(zhuǎn)到下面第二個(gè)文件

:bn  轉(zhuǎn)到下一個(gè)文件,若到最后一個(gè)文件,則轉(zhuǎn)到第一個(gè)文件

:bp  轉(zhuǎn)到上一個(gè)文件,若到第一個(gè)文件,則轉(zhuǎn)到最后一個(gè)文件

:args 查看整個(gè)列表中有哪些文件
:args a.txt b.txt c.txt重新定義一個(gè)文件列表
:args *.txt打開所有txt文件

Ctrl+^ 快速切換到上一個(gè)文件
`"  移動(dòng)光標(biāo)到上一次離開該文件時(shí)光標(biāo)所在的位置
`.  移動(dòng)光標(biāo)到最后一次對文件做出修改的位置

mA  設(shè)置當(dāng)前位置為全局標(biāo)記A(大寫字母)
`A  跳轉(zhuǎn)到全局位置A,即使它不在當(dāng)前文件內(nèi)

:set backup生成備份文件

"fy  把選中的內(nèi)容復(fù)制到寄存器f中
"fp  把寄存器f中的內(nèi)容粘貼出來
"wdaw 把光標(biāo)所在的word刪除并放入寄存器w中

:write >> logfile把當(dāng)前文件寫入(追加)到logfile中

vim -R 只讀打開
vim -M 強(qiáng)制禁止修改打開

:edit a.txt打開文件a.txt
:saveas b.txt把當(dāng)前緩沖區(qū)存入b.txt并同時(shí)打開b.txt進(jìn)行編輯
:file c.txt把當(dāng)前文件的名字改為c.txt

———————————————————————————————————————————————
書簽
mx                設(shè)定書簽,x是任意一個(gè)字母,通常小寫(a-z),x為小寫字母時(shí),局限在一個(gè)文件之間切換;大寫字母時(shí),可在文件之間切換.
`x                (`位于數(shù)字鍵1旁邊)跳轉(zhuǎn)到書簽x
:marks                        查看標(biāo)簽

#############################################實(shí)例#########################################
應(yīng)用實(shí)例
導(dǎo)入文件或shell執(zhí)行結(jié)果到正在編輯的文件中
:r 文件名
:r /etc/issue    將issue內(nèi)容導(dǎo)入正在編輯的文件中
:!shell命令                在vim中?行shell命令,執(zhí)行完后按回車會(huì)到vim界面
:r !shell命令        (r與!之間有空格)將shell命令執(zhí)行的結(jié)果導(dǎo)入到本文件中

在Vi中執(zhí)行命令   :!命令
:!ls /root            在編輯文件同時(shí)查看/root下的文件情況
不用退出vim
:r !date                在vim下將date命令的結(jié)果導(dǎo)入編輯文件中

定義快捷鍵          :map  快捷鍵 觸發(fā)命令
ctrl+v  再ctrl+p             或者直接ctrl+v+p ,
不要把^當(dāng)做尖角號,
:map ^x 命令        (map與^之間、x與命令之間有空格,此處到^并非鍵盤上的^,而是按下ctrl+v出現(xiàn)到快捷鍵,表示ctrl鍵,后面到x為任意字母)按下ctrl+x后會(huì)執(zhí)行對應(yīng)到命令
例:
:map ^p I#<ESC> 當(dāng)按下ctrl+p快捷組合鍵時(shí),在光標(biāo)所在行行首添加一個(gè)#號,并回到命令模式

范例:       :map ^P I#<ESC>
ctrl+p=插入#號然后回到命令模式
I表示vim的插入命令

:map ^E iksharpdabu@qq.com
ctrl+E=插入,i表示當(dāng)前光標(biāo)處插入
:map ^B 0x
ctrl+B=將光標(biāo)移至行首刪除光標(biāo)所在字符
0表示移至行首,x表示刪除光標(biāo)所在字符

連續(xù)行注釋  :n1 ,n2s/^/#/g
在行首加#,^表示行首
:n1 ,n2s/^#//g
將行首的#號刪除
:n1 ,n2s/^////g
表示轉(zhuǎn)義符

替換             :ab ksharp  ksharpdabu@qq.com
輸入ksharp,回車或者空格后,就變成了
ksharpdabu@qq.com
:unab    ksharp  ksharpdabu@qq.com
取消替換

連續(xù)行注釋
:n1,n2/^/#/g                (#號為注釋符號,在shell中注釋符號為#,C++中為//)
:n1,n2/^////g        C++源文件多行連續(xù)注釋

——————————————————————————————————————————————-

相關(guān)插件設(shè)置
########################################
phpcomplete插件

如何使用:
vi index.php
插入一段php代碼后比如:
htmlsp
先按下 Ctrl+x進(jìn)入^X模式,再按下 Ctrl+o, 就能看到提示列表框,以及對應(yīng)的function,還有對應(yīng)的函數(shù)定義比如參數(shù)等等
Ctrl+n, Ctrl+p 來上下選擇,ESC 來取消提示

在Insert模式下:

<backspace> 刪除光標(biāo)前的一個(gè)字符

<del> 刪除光標(biāo)所在的一個(gè)字符

Ctrl+W 刪除光標(biāo)前的一個(gè)單詞

Ctrl+U 刪除光標(biāo)前的一個(gè)行(按照輸入順序,不一定直接刪到行首)

Ctrl+p  補(bǔ)全單詞
Ctrl+n  補(bǔ)全單詞(向前查找)
Ctrl+x Ctrl+f 補(bǔ)全文件名
Ctrl+x Ctrl+l 補(bǔ)全整行內(nèi)容
Ctrl+a 補(bǔ)全上一次insert模式下插入的內(nèi)容

Ctrl+v 插入一個(gè)由ascii碼表示的符號,三位ascii碼或者遇到第一個(gè)非數(shù)字時(shí)生效

————————————————————————————————————————————------
########################################
auto pair插件(自動(dòng)封閉括號等)     關(guān)閉/開啟  ctrl+p

##########################################
netrw.vim插件
vim中查看到文件的目錄結(jié)構(gòu)
:e  /home/zebra/myprogram/src
附帶的操作目錄文件快捷鍵如下:
<F1>     顯示幫助
<cr>     如果光標(biāo)下是目錄, 則進(jìn)入該目錄; 如果光標(biāo)下文件, 則打開該文件
-            返回上級目錄
c            切換vim 當(dāng)前工作目?正在瀏覽的目錄
d            創(chuàng)建目錄
D            刪除目錄或文件
i            切換顯示方式
R            文件或目錄重命名
s            選擇排序方式
x            定制瀏覽方式, 使用你指定的程序打開該文件

###################################################
"taglist插件
:TlistOpen
:TlistClose
################################################

"NERDTree 插件
map <F6> :NERDTreeToggle<CR>
按鍵
C(大寫 C 鍵)
將光標(biāo)所在目錄設(shè)置為根目錄

u(小寫 u 鍵)
轉(zhuǎn)到上一級目錄

o(小寫 o 鍵,不是“零”)
展開(或折疊)光標(biāo)所在目錄的子目錄。如果光標(biāo)所在位置是一個(gè)文件,則在編輯窗口中打開該文件

此外在目錄樹窗口中輸入目錄 :Bookmark 收藏名 還可以將光標(biāo)所在目錄添加到收藏夾中。下次使用 :BookmarkToRoot 收藏名 可以直接轉(zhuǎn)到該目錄,并且以該目錄作為根目錄。更多命令可以參考 NERDTree 的幫助文檔。

############################################################################
NERD Commenter插件設(shè)置
下載安裝后,修改vim的配置文件,在下面加入
" NERD_commenter.vim

" <Leader>ca 在/*...*/與//這兩種注釋方式中切換(其它語言可能不一樣了)
let mapleader=","     "leader默認(rèn)是    ,為了方便,改為  逗號
map  <F7>   <leader>c$  "注視到行尾
map <F8> <leader>cc   ”單行注釋
map <F9> <leader>cu   "取消注釋
map <F12> <leader>ca   "sexy多行代碼注釋

/*

*/

這種

注意:leader默認(rèn)符號是    ,我這里用let來修改leader 符號為逗號 ,即便如此,注釋時(shí)也要同時(shí)按好幾個(gè)鍵,比如:
注釋3行代碼,要依次輸入    3 ,  c  空格鍵       四個(gè)按鍵。  同時(shí)速度要快,否則就不是注釋,而變成了修改文檔的內(nèi)容了。我當(dāng)時(shí)安裝NERD Commenter試了半天,都沒注釋成功。后來看了比人的文章,飛快的按下這幾個(gè)按鍵,就注釋成功了。但是還是太繁瑣了,就修改為一個(gè)按鍵,就可以注釋 /取消注釋。按我的這樣修改后,
F7                        注視到行尾
F8                         單行注釋
先按x,后按F8     即注釋x行的代碼,記得按的速度要快
F9                        取消注釋 ,也可以與數(shù)字搭配
F12                      sexy的代碼注釋  ,也可以與數(shù)字搭配

依次按    ,  c   a                表示//  和/*   */ 兩種注釋間切換。這個(gè)我就沒設(shè)置一鍵操作 ,大家個(gè)以根據(jù)自己的情況改成某個(gè)按鍵

###########################################################
txtBrowser 插件

<Leader>s: 用搜索引擎(可定制, 默認(rèn)為google)搜索光標(biāo)下的單詞或選中的文本.
<Leader>f: 用網(wǎng)絡(luò)字典(可定制, 默認(rèn)為google.cn)對光標(biāo)下的單詞或選中的文本查字典.
<Leader>g: 打開光標(biāo)下或選中的URL.
<Leader>h: 高亮光標(biāo)下的單詞或選中的文本(可跨行).
*:                 向前搜索光標(biāo)下的單詞或選中的文本(可跨行)

?:                 向后搜索光標(biāo)下的單詞或選中的文本(可跨行)

########################相關(guān)vim技巧#################################3
1.用:set list來查看所有不可見字符,反之用:set nolist關(guān)閉
2.vim操作ftp,打開:
:e ftp://192.168.0.1/1.txt
保存(如果不存在則創(chuàng)建):
:w ftp://192.168.0.1/1.txt
讀?。?br/>:r ftp://192.168.0.1/1.txt
以上操作第一次打開時(shí)需要輸入用戶名和密碼,
以后就不用了,vim 會(huì)記住的。
3.Ctrl+R 是在編輯時(shí)或者命令行界面下調(diào)入寄存器值的熱鍵,Ctrl+R+/ 會(huì)得到上一次查詢的條件,Ctrl+R+<寄存器名>; 相當(dāng)于 Normal 模式下的 "<寄存器名>;p 命令
4.vim在編輯一個(gè)文件時(shí)如果打開多個(gè)文件,:args <CTRL-R>;% file2 file3
5.如何刪除連續(xù)兩行之間的回車符,使連續(xù)的兩行成為一行,Jx
6.想顯示行號,可以用 :set nu
7.vim中光標(biāo)在C函數(shù)和系統(tǒng)調(diào)用上時(shí),按K進(jìn)入man手冊頁
8.V 打開"可視模式"(不是虛擬模式,虛擬是 virtual)后,可以有很多種辦法移動(dòng)光標(biāo)的,不一定非得用 h j k l , 比如可以搜索定位, 也可以用 [[ ]] ][ [] } { 等段落定位的命令. v]] v[[ v} 這樣就可以選中一大塊,而不用一行一行地選 還有 H L 這些都可以用. 詳細(xì)請 help motion 另外, vim 內(nèi)置了很多以 a 打頭的文本對象, 如 a{ 表示一個(gè) {} 塊, ap 表示一個(gè)段落等等。=a{ 就可以重排當(dāng)前語法塊.
9.全選的命令是 ggVG gg表示到第一行第一個(gè)字母, V進(jìn)入visual line G則到文件尾。
10.vim是否支持將語法高亮度顯示的結(jié)果保存為一個(gè)html文檔,:TOhtml
11.用:split new | r!ls 來獲得外部命令的輸入,其中r !ls 則表示執(zhí)行外部命令 ls,并且捕獲(讀入)它的輸出。
12.vi中用``就可以回到剛才的位置,vim中用ctrl+o
13.用:set ai的命令來啟動(dòng)自動(dòng)縮進(jìn)。用:syntax on命令來啟動(dòng)語法著色
14.在"插入模式"下刪除光標(biāo)到行尾的字符,^od$,^o 表示同時(shí)按住 Ctrl 和 O 鍵,其實(shí)也可以是^oD,還有就是如果要?jiǎng)h除到某個(gè)字符位置的話,就用^odfx,x表示要?jiǎng)h除到的字符
15.自動(dòng)縮進(jìn)set autoindent 和set cindent
16.括號自動(dòng)補(bǔ)全:iab ( ()
17.刪除所有偶數(shù)行<ESC>;ggqajddq10000@a
18.排版代碼gg=G
19.:args查看正在編輯的文件名或者用ctrl+g
20.gj gk 分別可以向下、向上移動(dòng)一個(gè)物理行

 

切換vim目錄:

:cd   目錄路徑

修改當(dāng)前vim編輯的文件的文件名

:f    新文件名

 

 

關(guān)于代碼折疊相關(guān)的快捷鍵,大家其實(shí)可以自己在vim中輸入 :help zo  來查看打開和關(guān)閉折疊的相關(guān)解釋:

你可以在用戶手冊的第 28 章找到有關(guān)折疊的序論。|usr_28.txt|

1. 折疊方法        |fold-methods|
2. 折疊命令        |fold-commands|
3. 折疊選項(xiàng)        |fold-options|
4. 折疊行為        |fold-behavior|

{Vi 沒有折疊}
{僅當(dāng)編譯時(shí)加入 |+folding| 特性才有效}

==============================================================================
1. 折疊方法                    *fold-methods*

可用選項(xiàng) 'foldmethod' 來設(shè)定折疊方法。

設(shè)置選項(xiàng) 'foldmethod' 為非 "manual" 的其它值時(shí),所有的折疊都會(huì)被刪除并且創(chuàng)建新
的。如果設(shè)置成 "manual",將不去除已有的折疊。可以利用這一點(diǎn)來先自動(dòng)定義折疊,
然后手工調(diào)整。

有 6 種方法來選定折疊:
manual        手工定義折疊
indent        更多的縮進(jìn)表示更高級別的折疊
expr        用表達(dá)式來定義折疊
syntax        用語法高亮來定義折疊
diff        對沒有更改的文本進(jìn)行折疊
marker        對文中的標(biāo)志折疊

手 工                        *fold-manual*

使用命令來手工定義要折疊的范圍。分析文本并發(fā)現(xiàn)折疊的腳本也可用這種方法。

折疊的級別僅由嵌套次數(shù)來定義。要對一定行數(shù)的折疊增加級別,可以對相同的行反復(fù)定
義折疊。

當(dāng)你退出文件編輯時(shí),手工折疊會(huì)被遺棄。要保存折疊,使用 |:mkview| 命令。之后要
恢復(fù)可以使用 |:loadview|。

縮 進(jìn)                        *fold-indent*

由縮進(jìn)行自動(dòng)定義折疊。

折疊級別由行的縮進(jìn)除以 'shiftwidth' (向下取整) 計(jì)算而得。連續(xù)的,有同樣或更高
的折疊級別的行,形成一個(gè)折疊。在其中,有更高折疊級別的行形成嵌套的折疊。

嵌套的級別數(shù)受 'foldnestmax' 選項(xiàng)限制。

某些行會(huì)被忽略并得到上一行或下一行的折疊級別 (取較小值)。符合條件的這樣的行要
么是空行,要么以 'foldignore' 選項(xiàng)里包含的字符開始。在查找 'foldignore' 里包含
的字符時(shí),空白字符會(huì)被忽略。對于 C,該選項(xiàng)使用 "#" 來略過要預(yù)處理的那些行。

當(dāng)你想用另一種方式來略過行時(shí),使用 'expr' 方法。在 'foldexpr' 中 |indent()| 函
數(shù)被用來取得一行的縮進(jìn)。

表 達(dá) 式                        *fold-expr*

就象用 "indent" 方式一樣,表達(dá)式方式的折疊也是由折疊級別自動(dòng)定義的。對每行,通
過計(jì)算選項(xiàng) 'foldexpr' 的值來并得到它的折疊級別。如:
?所有以制表符開始的連續(xù)的幾行,創(chuàng)建折疊: >
:set foldexpr=getline(v:lnum)[0]=="\t"
調(diào)用一函數(shù)來計(jì)算折疊級別:   >
:set foldexpr=MyFoldLevel(v:lnum)
用空白行分開的段落構(gòu)成折疊:   >
: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" 要特殊處理的字符必須用反斜杠轉(zhuǎn)義。(空格,反斜杠,雙引號等等,參考
|option-backslash|)

這些是表達(dá)式的計(jì)算條件:
- 當(dāng)前緩沖區(qū)和窗口值依所在行而定
- 變量 "v:lnum" 被定為該行行號
- 計(jì)算結(jié)果將用以下方式解釋:
值            代表 ~
0            這行不折疊
1, 2, ..        這行的折疊級別 1,2 等
-1            折疊級別沒有定義,使用這行之前或之后一行的級別值,取其
中較小的一個(gè)。
"="            使用上一行的折疊級別。
"a1", "a2", ..    上一行的折疊級別加 1,2,..
"s1", "s2", ..    上一行的折疊級別減 1,2,..
"<1", "<2", ..    此折疊級別在本行結(jié)束
">1", ">2", ..    此折疊級別在本行開始

不需要用 ">1" ("<1") 標(biāo)志?疊的開始 (結(jié)束)。當(dāng)這行折疊級別高于 (低于) 上一行的
級別時(shí),折疊將開始 (結(jié)束)。

表達(dá)式必須沒有副作用。在緩沖區(qū)里的文字,光標(biāo)位置,查找模式,選項(xiàng)等等,不能被改
動(dòng)。如果你非常小心,改動(dòng)并恢復(fù)這些設(shè)置還是可以的。

表達(dá)式中有錯(cuò)誤或者計(jì)算結(jié)果不能識別時(shí),Vim 不會(huì)產(chǎn)生錯(cuò)誤消息,而是將折疊級別設(shè)為
0。所以當(dāng)需要調(diào)試時(shí),可將 'debug' 選項(xiàng)設(shè)為 "msg",錯(cuò)誤消息就可以被見到了。

備注: 由于每一行關(guān)于表達(dá)式的值都要被計(jì)算,這一折疊方式可能會(huì)很慢!

最好避免使用 "=" , "a" 和 "s" 作為返回值,因?yàn)?Vim 不得不經(jīng)常向后回溯以得到折
疊級別。這會(huì)降低執(zhí)行速度。

|foldlevel()| 計(jì)算相對于上一折疊級別的折疊級別。但要注意,如果該級別未知,
foidlevel() 返回 -1。它返回的級別對應(yīng)于該行開始的位置,盡管折疊本身可能在該行
結(jié)束。

折疊可能會(huì)沒有及時(shí)更新。用 |zx| 或者 |zX| 可以強(qiáng)制折疊更新。

語 法                        *fold-syntax*

由帶有 "fold" 參數(shù)的語法項(xiàng)來定義折疊。|:syn-fold|

折疊級別由嵌套的折疊層數(shù)來定義。嵌套數(shù)由 'foldnestmax' 限定。

要小心指定合適的語法同步方式。如果這里有問題,折疊和顯示高亮可能會(huì)不一致。尤其
在使用可能跨越多行的模式時(shí)更要小心。如果有疑問,不妨嘗試如下的強(qiáng)制同步: >
:syn sync fromstart
<

比 較                        *fold-diff*

對沒有改動(dòng)的文本或靠近改動(dòng)的文本自動(dòng)定義折疊。

這個(gè)方法僅適用于當(dāng)前窗口設(shè)定 'diff' 選項(xiàng)來顯示不同之處時(shí)才有效。不然,整個(gè)緩沖
區(qū)就是一個(gè)大的折疊。

選項(xiàng) 'diffopt' 可以指定上下文。即折疊和不被折疊包括的改變之間相距的行數(shù)。比
如,設(shè)定上下文為 8: >
:set diffopt=filler,context:8
默認(rèn)值是 6。

當(dāng)設(shè)定了 'scrollbind' 選項(xiàng)時(shí),Vim 會(huì)試圖在其它比較窗口中打開相同的折疊,這樣這
些窗口就會(huì)顯示同一處文本。

標(biāo) 志                        *fold-marker*

在文本中可以加入標(biāo)志來指明折疊開始和結(jié)束的地方。這可以讓你精確的定義折疊。這也
讓你可以放心地刪除和復(fù)制折疊而不用擔(dān)心錯(cuò)誤包括了某些行。選項(xiàng) 'foldtext' 通常設(shè)
置為使折疊行顯示折疊標(biāo)志之前的文本。這樣做可以為折疊命名。

標(biāo)志可以包含級別數(shù),也可以使用匹配對。包含級別數(shù)較簡單,你無須添加結(jié)束標(biāo)志,并
可以避免標(biāo)志不配對的問題。如: >
/* global variables {{{1 */
int varA, varB;

/* functions {{{1 */
/* funcA() {{{2 */
void funcA() {}

/* funcB() {{{2 */
void funcB() {}

?疊開始于 "{{{" 標(biāo)志。接下去的數(shù)字決定了折疊級別。產(chǎn)生的效果依當(dāng)前折疊級別和
該折疊標(biāo)志給定的級別的大小關(guān)系而定:
1. 如果遇到級別相同的標(biāo)志,上一個(gè)折疊結(jié)束,另一個(gè)有同樣級別的折疊開始。
2. 如果遇到級別更高的標(biāo)志,開始一個(gè)嵌套的折疊。
3. 如果遇到級別更低的標(biāo)志,所有大于或等于當(dāng)前級別的折疊結(jié)束,且指定級別的折疊
開始。

數(shù)字指定了折疊級別。不能使用 0 (忽略級別為 0 的標(biāo)志)。你可以使用 "}}}" 帶上一
個(gè)數(shù)字來表示這個(gè)級別的折疊結(jié)束。此行以下的折疊級別將比當(dāng)前級別小一。備注: Vim
不會(huì)回溯匹配的標(biāo)志 (這將耗費(fèi)太多的時(shí)間)。如: >

{{{1
fold level here is 1
{{{3
fold level here is 3
}}}3
fold level here is 2

你也可以用一對匹配標(biāo)志 "{{{" 和 "}}}" 來定義折疊。每個(gè) "{{{" 使折疊級別加 1,
"}}}" 使折疊級別減 1。注意一定要使標(biāo)志匹配!如: >

{{{
fold level here is 1
{{{
fold level here is 2
}}}
fold level here is 1

帶數(shù)字的標(biāo)志和沒有帶數(shù)字的標(biāo)志可以混合使用。對于一個(gè)大折疊我們可以使用帶數(shù)字的
標(biāo)志,在函數(shù)的內(nèi)部我們可以使用不帶數(shù)字的。如對文件中的 "結(jié)構(gòu)定義","局部變量"
和 "函數(shù)原型" 各個(gè)部分,使用級別 1 的折疊。對定義和函數(shù)體使用級別 2 的標(biāo)志。而
在函數(shù)內(nèi)部可以使用不帶數(shù)字的標(biāo)志。當(dāng)你在一函數(shù)中作更改以分割折疊時(shí),你無須記著
標(biāo)志在哪里。

選項(xiàng) 'foldmarker' 可設(shè)定所用的標(biāo)志。建議保留默認(rèn)值 "{{{,}}}"。這樣在 Vim 用戶
間交換文件時(shí)就不會(huì)出問題。有時(shí)為了要編輯的文件必須改變該選項(xiàng) (如,文件包含了來
自另一個(gè)編輯器的折疊標(biāo)志,或?qū)τ诋?dāng)前文件的語法而言,折疊標(biāo)志會(huì)產(chǎn)生歧義等)。

*fold-create-marker*
"zf" 可通過標(biāo)志來創(chuàng)建一個(gè)折疊。 Vim 將為你插入開始和結(jié)束標(biāo)志。這些標(biāo)志由
'foldmarker' 指定。標(biāo)志會(huì)被添加在行末。如果 'commentstring' 不為空,使用之。
以下情況下可能無法正常工作:
- 此行已有一個(gè)帶級別的標(biāo)志了。Vim 無法判斷該如何做。
- 在附近的折疊里使用了帶級別的標(biāo)志,使添加無法進(jìn)行。
- 這行包含在一注釋中,且 'commentstring' 不為空,且嵌套的注釋是非法的。如,在
C 的注釋中加入 /* {{{ */ ,這將使現(xiàn)有的注釋中斷。你可以在注釋之前或之后添加
標(biāo)志,或手工添加。
總的來說,當(dāng)你已有帶級別的標(biāo)志時(shí),再讓 Vim 為你創(chuàng)建標(biāo)志不是個(gè)好主意。

*fold-delete-marker*
"zd" 可用來刪除一個(gè)用標(biāo)志定義的折疊。 Vim 將為你刪除標(biāo)志。Vim 將?折疊的開始和
結(jié)束處根據(jù) 'foldmarker' 查找開始和結(jié)束標(biāo)志。如果標(biāo)志周圍文字和 'commentstring'
匹配,這些文字也會(huì)被刪除。
但在以下情況下無法正確執(zhí)行:
- 當(dāng)一行包含有多于一個(gè)的標(biāo)志且其中一個(gè)指定了級別。Vim 不考慮結(jié)果是不是真能刪除
折疊,而僅刪除第一個(gè)標(biāo)志。
- 當(dāng)這個(gè)標(biāo)志帶有級別且同時(shí)被用來開始或結(jié)束幾個(gè)折疊時(shí)。

==============================================================================
2. 折疊命令                    *fold-commands* *E490*

所有的折疊命令用 "z" 開頭。提示: 如果你從側(cè)面看 "z" 象一張疊起來的紙。

創(chuàng) 建 和 刪 除 折 疊 ~
*zf* *E350*
zf{motion}  或
{Visual}zf    創(chuàng)建折疊操作符。
僅當(dāng) 'foldmethod' 設(shè)為 "manual" 或 "marker" 時(shí)有效。
用 "manual" 方式,新建的折疊會(huì)被關(guān)閉。同時(shí) 'foldenable' 會(huì)被設(shè)
定。
參考 |fold-create-marker|。

*zF*
zF        對 [count] 行創(chuàng)建折疊。其余同 "zf" 。

:{range}fo[ld]                        *:fold* *:fo*
對 {range} 內(nèi)的行創(chuàng)建折疊。其余同 "zf" 。

*zd* *E351*
zd        刪除 (delete) 在光標(biāo)下的折疊。當(dāng)光標(biāo)在被折疊的行上,該折疊被刪
除。嵌套的折疊上移一級。在可視模式下所選區(qū)域 (部分) 涵蓋的折疊
都被刪除。注意: 這種一次刪除多個(gè)折疊的簡單方法不可撤銷。
僅當(dāng) 'foldmethod' 設(shè)為 "manual" 或 "marker" 時(shí)有效。
參考 |fold-delete-marker|。

*zD*
zD        循環(huán)刪除 (Delete) 光標(biāo)下的折疊。在可視模式下所選區(qū)域 (部分) 涵
蓋的折疊和嵌套的折疊都被刪除。
僅當(dāng) 'foldmethod' 設(shè)為 "manual" 或 "marker" 時(shí)有效。
參考 |fold-delete-marker|。

*zE* *E352*
zE        除去 (Eliminate) 窗口里所有的折疊。
僅當(dāng) 'foldmethod' 設(shè)為 "manual" 或 "marker" 時(shí)有效。
參考 |fold-delete-marker|。

打 開 和 關(guān) 閉 折 疊 ~

一個(gè)小于 'foldminlines' 的折疊的顯?就象它被打開時(shí)一樣。所以,以下的命令對于小
折疊所起的作用與描述不同。

*zo*
zo        打開 (open) 在光標(biāo)下的折疊。當(dāng)給定計(jì)數(shù)時(shí),相應(yīng)深度的折疊被打
開。在可視模式下,所選區(qū)域的所有行的折疊被打開一級。

*zO*
zO        循環(huán)打開 (Open) 光標(biāo)下的折疊。不在光標(biāo)下的折疊不改變。
在可視模式下,打開所有的在選中區(qū)域里的折疊,包括被部分選中的。

*zc*
zc        關(guān)閉 (close) 在光標(biāo)下的折疊。當(dāng)給定計(jì)數(shù)時(shí),相應(yīng)深度的折疊被關(guān)
閉。在可視模式下,所選區(qū)域里的所有行的折疊被關(guān)閉一級。
'foldenable' 被設(shè)定。

*zC*
zC        循環(huán)關(guān)閉 (Close) 在光標(biāo)下的所有折疊。不在光標(biāo)下的折疊不改變。
在可視模式下,關(guān)閉所有的在選中區(qū)域里的折疊,包括被部分選中的。
'foldenable' 被設(shè)定。

*za*
za        當(dāng)光標(biāo)位于一關(guān)閉的折疊上時(shí),打開之。當(dāng)折疊嵌套時(shí),你?能需要用
"za" 數(shù)次。當(dāng)給定計(jì)數(shù)時(shí),打開相應(yīng)數(shù)量的被關(guān)閉的折疊。
當(dāng)光標(biāo)位于一打開的折疊上時(shí),關(guān)閉之且設(shè)定 'foldenable' 。這僅關(guān)
閉一級折疊,因?yàn)樵俅问褂?"za" 將再次打開折疊。當(dāng)給定計(jì)數(shù)時(shí),關(guān)
閉相應(yīng)數(shù)量的折疊 (這不同于重復(fù) "za" 許多次)。

*zA*
zA        當(dāng)處在一關(guān)閉的折疊上時(shí),循環(huán)地打開折疊。
當(dāng)處在一打開的折疊上時(shí),循環(huán)地關(guān)閉折疊且設(shè)定 'foldenable'。

*zv*
zv        查看 (view) 光標(biāo)所在的行: 僅打開足夠的折疊使光標(biāo)所在的行不被折
疊。

*zx*
zx        更新折疊: 撤消被手工打開和關(guān)閉的折疊: 再次應(yīng)用 'foldlevel'。
然后使用 "zv" : 查看光標(biāo)所在行。
同時(shí)強(qiáng)制重新計(jì)算折疊。使用 "foldexpr" 并且緩沖區(qū)發(fā)生改變但折疊
不能正確地更新時(shí),這會(huì)有用。

*zX*
zX        手工恢復(fù)被打開和關(guān)閉的折疊: 再次應(yīng)用 'foldlevel'。
也同時(shí)強(qiáng)制重新計(jì)算折疊,同 |zx|。

*zm*
zm        折起更多 (more): 'foldlevel' 減 1。如果 'foldlevel' 已經(jīng)為 0,
則不會(huì)被減小。
'foldenable' 被設(shè)定。

*zM*
zM        關(guān)閉所有折疊: 'foldlevel' 設(shè)為 0。
'foldenable' 被設(shè)定。

*zr*
zr        減少 (reduce) 折疊: 'foldlevel' 加 1。

*zR*
zR        打開所有的折疊。'foldlevel' 設(shè)為最高級別。

*:foldo* *:foldopen*
:{range}foldo[pen][!]
在 {range} 內(nèi)打開折疊。當(dāng)加上 [!] 時(shí),所有的折疊都被打開。對查
看在 {range} 內(nèi)的所有文本很有用。沒有 [!] 時(shí),打開一級折疊。

*:foldc* *:foldclose*
:{range}foldc[lose][!]
在 {range} 內(nèi)關(guān)閉折疊。當(dāng)加上 [!] 時(shí),所有的折疊都被關(guān)閉。對隱
藏在 {range} 內(nèi)的所有文本很有用。沒有 [!] 時(shí),關(guān)閉一級折疊。

*zn*
zn        不折疊 (none): 復(fù)位 'foldenable'。所有的折疊被打開。

*zN*
zN        正常折疊 (normal): 設(shè)定 'foldenable'。所有的折疊都展現(xiàn)它們之前
的樣子。

*zi*
zi        翻轉(zhuǎn) 'foldenable' 的值。

在 折 疊 間 移 動(dòng) ~

*[z*
[z        到當(dāng)前打開的折疊的開始。如果已在開始處,移到包含這個(gè)折疊的折疊
開始處。如果沒有包含它的折疊,命令執(zhí)行失敗。
當(dāng)給定計(jì)數(shù),重復(fù)此命令 [count] 次。

*]z*
]z        到當(dāng)前打開的折疊的結(jié)束。如果已在結(jié)束處,移到包含這個(gè)折疊的折疊
結(jié)束處。如果沒有包含它的折疊,命令執(zhí)行失敗。
當(dāng)給定計(jì)數(shù),重復(fù)此命令 [count] 次。

*zj*
zj        向下移動(dòng)。到達(dá)下一個(gè)折疊的開始處。關(guān)閉的折疊也被計(jì)入。
當(dāng)給定計(jì)數(shù),重復(fù)此命令 [count] 次。
此命令可在 |operator| 后使用。

*zk*
zk        向上移動(dòng)到前一折疊的結(jié)束處。關(guān)閉的折疊也被計(jì)入。
當(dāng)給定計(jì)數(shù),重復(fù)此命令 [count] 次。
此命令可在 |operator| 后使用。

對 折 疊 執(zhí) 行 命 令 ~

:[range]foldd[oopen] {cmd}            *:foldd* *:folddoopen*
對所有不在關(guān)閉的折疊中的行執(zhí)行 {cmd}。
給定 [range] 時(shí),僅對范圍內(nèi)那些行起作用。
每次命令被執(zhí)行時(shí),光標(biāo)會(huì)被定位在要被操作的行上。
就如 ":global" 命令: 首先標(biāo)記出所有不在關(guān)閉的折疊中的行。然后
對所有標(biāo)記過的行,執(zhí)行 {cmd}。所以當(dāng) {cmd} 改變了文本的折疊
時(shí),對命令執(zhí)行的位置沒有影響 (當(dāng)然,刪除行例外)。
如: >
:folddoopen s/end/loop_end/ge
<        使用標(biāo)志位 "e" 避免了當(dāng) "end" 不匹配時(shí)得到錯(cuò)誤消息。

:[range]folddoc[losed] {cmd}            *:folddoc* *:folddoclosed*
對所有在關(guān)閉的折疊里的行,執(zhí)行 {cmd}。
其它同 ":folddoopen" 命令。

==============================================================================
3. 折疊選項(xiàng)                    *fold-options*

顏 色                            *fold-colors*

對關(guān)閉的折疊的顏色的設(shè)定由 Folded 高亮組 |hl-Folded| 決定。對折疊欄的顏色的設(shè)
定由 FolderColumn 高?組 |hl-FoldColumn| 決定。
下面是設(shè)定顏色的例子: >

:highlight Folded guibg=grey guifg=blue
:highlight FoldColumn guibg=darkgrey guifg=white
<

折 疊 級 別                        *fold-foldlevel*

'foldlevel' 是個(gè)數(shù)值選項(xiàng): 數(shù)字越大則打開的折疊更多。
當(dāng) 'foldlevel' 為 0 時(shí),所有的折疊關(guān)閉。
當(dāng) 'foldlevel' 為正數(shù)時(shí),一些折疊關(guān)閉。
當(dāng) 'foldlevel' 很大時(shí),所有的折疊打開。
'foldlevel' 的改變后立即生效。之后,折疊可以被手動(dòng)地打開和關(guān)閉。
當(dāng)其值增大,在新級別 (譯者注: 舊級別?) 之上的折疊被打開。手工打開的折疊不會(huì)被
關(guān)閉。
當(dāng)其值減小,在新級別之上的折疊被關(guān)閉。手工關(guān)閉的折疊不會(huì)被打開。

折 疊 文 本                        *fold-foldtext*

'folftext' 是個(gè)字符串選項(xiàng),定義了一個(gè)表達(dá)式。這個(gè)表達(dá)式被用來求得關(guān)閉折疊所顯
示的文字。如: >

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

顯示了折疊的第一行,除去其中的 "/*"、"*/" 和 "{{{" 。
備注: 使用反斜杠是為了避免一些字符被 ":set" 命令解釋。使用一個(gè)函數(shù)更簡單: >

:set foldtext=MyFoldText()
:function MyFoldText()
:  let line = getline(v:foldstart)
:  let sub = substitute(line, '/*|*/|{{{d=', '', 'g')
:  return v:folddashes . sub
:endfunction

'foldtext' 的計(jì)算是在沙盤 |sandbox| 里完成的。其中的當(dāng)前窗口設(shè)為要顯示該行的窗
口。錯(cuò)誤被忽略。

默認(rèn)值是 |foldtext()|。對于大多數(shù)類型的折疊它可以返回適合的文字。如果你不喜歡
它,你可以自己指定 'foldtext' 表達(dá)式??梢允褂靡韵逻@些 Vim 變量:
v:foldstart    折疊首行的行號
v:foldend    折疊末行的行號
v:folddashes    一個(gè)含有連字符的字符串,用來表示折疊級別
v:foldlevel    折疊級別

在結(jié)果中,制表符被替換為空格,而不可顯示的字符被替換為可顯示的字符。

結(jié)果行被截短以適合窗口的寬度,永遠(yuǎn)不會(huì)回繞。
當(dāng)在文字后有空余時(shí),用 'fillchars' 來填充。

備注: 對那些 ":set" 命令作特殊處理的字符在其前面須加上反斜杠。如: 空格,反斜杠
和雙引號。 |option-backslash|

折 疊 欄                        *fold-foldcolumn*

'foldcolumn' 是個(gè)數(shù)字,它設(shè)定了在窗口的邊上表示折疊的欄的寬度。當(dāng)為 0 時(shí),沒有
折疊欄。一個(gè)普通值是 4 或 5。最小可用的值是 2,不過 1 仍然可以提供一些信息。最
大是 12。

一個(gè)打開的折疊由一欄來表示,頂端是 '-',其下方是 '|'。這欄在折疊結(jié)束的地方結(jié)
束。當(dāng)折疊嵌套時(shí),嵌套的折疊出現(xiàn)在被包含的折疊右方一個(gè)字符位置。

一個(gè)關(guān)閉的折疊由 '+' 表示。

當(dāng)折疊欄太窄而不能顯示所有折疊時(shí),顯示一數(shù)字來表示嵌套的級別。

在折疊欄點(diǎn)擊鼠標(biāo),可以打開和關(guān)閉折疊:
- 點(diǎn)擊 '+' 打開在這行的關(guān)閉折疊
- 在任何其他非空字符上點(diǎn)擊,關(guān)閉這行上的打開折疊

其 他 選 項(xiàng)

'foldenable'  'fen':    復(fù)位時(shí)打開所有折疊。
'foldexpr'    'fde':    用于 "expr" 折疊的表達(dá)式。
'foldignore'  'fdi':    用于 "indent" 折疊的字符。
'foldmarker'  'fmr':    用于 "marker" 折疊的標(biāo)志。
'foldmethod'  'fdm':    當(dāng)前折疊方法。
'foldminlines' 'fml':    關(guān)閉折疊的最小顯示行數(shù)。
'foldnestmax' 'fdn':    用于 "indent" 和 "syntax" 折疊的最大嵌套層數(shù)。
'foldopen'    'fdo':    哪一種命令可以打開關(guān)閉的折疊。
'foldclose'   'fcl':    當(dāng)光標(biāo)不在折疊上時(shí)關(guān)閉折疊。

==============================================================================
4. 折疊行為                        *fold-behavior*

當(dāng)上下移動(dòng)和滾動(dòng)時(shí),光標(biāo)將移至連續(xù)折疊的行的第一行。當(dāng)光標(biāo)已在被折疊的行上時(shí),
它移動(dòng)到下一個(gè)沒有被折疊的行上,或下一個(gè)關(guān)閉的折疊。

當(dāng)光標(biāo)在被折疊的行上時(shí),光標(biāo)總是顯示在第一列。標(biāo)尺顯示確切的標(biāo)位置。光標(biāo)本應(yīng)
也在實(shí)際位置顯示的,但因?yàn)楸徽郫B而無法做到。

許多移動(dòng)命令處理連續(xù)被折疊的行就象處理空行一樣。如,"w" 命令只在首列停一次。

在插入模式下,光標(biāo)所在的行不會(huì)被折疊。這讓你看得見你鍵入的內(nèi)容。

當(dāng)使用操作符時(shí),一個(gè)關(guān)閉的行被作為整體處理。所以 "dl" 在光標(biāo)下刪除了整個(gè)關(guān)閉的
折疊。

對 Ex 命令的執(zhí)行范圍被調(diào)整,使得它總是從關(guān)閉折疊的第一行開始,在關(guān)閉折疊的最后
一行結(jié)束。所以,命令: >
:s/foo/bar/g
當(dāng)光標(biāo)在關(guān)閉的折疊上時(shí),它將在整個(gè)折疊里用 "bar" 替換 "foo"。
不過 |:folddoopen| 和 |:folddoclosed| 的操作并非如此。

編輯一個(gè)已經(jīng)被編輯過的緩沖區(qū)時(shí),上次被使用的折疊設(shè)置會(huì)被再次使用。對手工定義折
疊方式,已經(jīng)被定義的折疊會(huì)被恢復(fù)。對所有的折疊方式,手工打開和關(guān)閉的折疊會(huì)被恢
復(fù)。如果這個(gè)緩沖區(qū)曾經(jīng)在這個(gè)窗口里被編輯,過去用的值被恢復(fù)。否則,來自該緩沖區(qū)
最近一次編輯的窗口值被使用。

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

統(tǒng)計(jì)單詞數(shù)、行數(shù)等 *count-items*

如果需要統(tǒng)計(jì)緩沖區(qū)中一個(gè)模式 (pattern) 出現(xiàn)的頻率,使用 substitute 命令并加入

'n' 標(biāo)志位以避免實(shí)際的替代。Vim 報(bào)告的已替代的數(shù)目就是模式出現(xiàn)的次數(shù)。例: >

:%s/./&/gn字符數(shù)

:%s/i+/&/gn單詞數(shù)

:%s/^//n行數(shù)

:%s/the/&/gn任何地方出現(xiàn)的 "the"

:%s/<the>/&/gn作為單詞出現(xiàn)的 "the"

你可能希望復(fù)位 'hlsearch' 或者使用 ":nohlsearch"?

如果你希望沒有匹配的時(shí)候不顯示錯(cuò)誤,那么增加標(biāo)志位 'e'。

另一種辦法就是在可視模式下使用 v_g_CTRL-G。

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

*08.3* 調(diào)整窗口大小

:split 命令可以接受計(jì)數(shù)前綴。如果指定了這個(gè)前綴,這個(gè)數(shù)將作為窗口的高度。例如

如下命令可以打開一個(gè)三行的窗口并編輯文件 alpha.c:

>

:3split alpha.c

對于已經(jīng)打開的窗口,你可以用有幾種方法改變它的大小。如果你有鼠標(biāo),很簡單: 把鼠

標(biāo)指針移到分割兩個(gè)窗口的狀態(tài)欄上,上下拖動(dòng)?可。

要擴(kuò)大窗口:

>

CTRL-W +

要縮小窗口:

>

CTRL-W -

這兩個(gè)命令接受計(jì)數(shù)前綴用于指定擴(kuò)大和縮小的行數(shù)。所以 "4 CTRL-W +" 會(huì)使窗口增高

4 行。

要把一個(gè)窗口設(shè)置為指定的高度,可以用這個(gè)命令:

>

{height}CTRL-W _

就是先輸入一個(gè)數(shù)值,然后輸入 CTRL-W 和一個(gè)下劃線 (在美式英語鍵盤中就是 Shift

加上 "-")。

    要把一個(gè)窗口擴(kuò)展到盡可能大,可以使用無計(jì)數(shù)前綴的 CTRL-W _ 命令。

使 用 鼠 標(biāo)

在 Vim 中,你可以用鍵盤很快完成很多工作。但很不幸,改變窗口大小要敲不少鍵。在

這種情況下,使用鼠標(biāo)會(huì)更快一些。把鼠標(biāo)指針移到狀態(tài)條上,按住左鍵并拖動(dòng)。狀態(tài)條

會(huì)隨之移動(dòng),這會(huì)使一個(gè)窗口更大一個(gè)更小。

選 項(xiàng)

'winheight' 選項(xiàng)設(shè)置最小的期望窗口高度而 'winminheight' 選項(xiàng)設(shè)置最小的 "硬性"

高度。

    同樣,'winwidth' 設(shè)置最小期望寬度而 'winminwidth' 設(shè)置最小硬性寬度。

    'equalalways' 選項(xiàng)使所有的窗口在關(guān)閉或者打開新窗口的時(shí)候總保持相同大小

轉(zhuǎn)載自:http://www.tjdsmy.cn/?p=801

提交成功!非常感謝您的反饋,我們會(huì)繼續(xù)努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問題: