Chinaunix首页 | 论坛 | 博客
  • 博客访问: 60480
  • 博文数量: 17
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 195
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-01 14:14
文章分类

全部博文(17)

文章存档

2011年(1)

2009年(16)

我的朋友

分类: LINUX

2009-04-29 10:30:14

VIM提供的移动方式多如牛毛,但我们并不需要掌握全部这些命令,只需要掌握最适合自己的那些命令。因为我们最终的目的,并不是成为一个VIM高手,而是更高效的编辑文本。
我们下面介绍的命令,如果没有特别说明,都是在Normal模式下使用的命令。
这些命令的帮助入口,就是“:help 命令名”。例如,对于“j”命令,查看它的帮助,使用“:help j”。
1 [上下左右]
让我们从最简单的、也是使用频率最高的h, j, k, l开始。
h, j, k, l的移动方式,已经成为VIM的标志之一,并且也为更多的软件所接受。如果你仍在用上下左右光标来移动的话,说明你内心并没有真正接受VIM的哲学,如果真的打算把VIM做为你的编辑工具,就从使用h, j, k, l开始吧!
h, j, k, l分别代表向左、下、上、右移动。如同许多VIM命令一样,可以在这些键前加一个数字,表示移动的倍数。例如,“10j”表示向下移动10行;“10l”表示向右移动10列。
缺省情况下,h和l命令不会把光标移出当前行。如果已经到了行首,无论按多少次h键,光标始终停留在行首,l命令也类似。如果希望h和l命令可以移出当前行,更改'whichwrap'选项的设置(:help 'whichwrap')。
VIM的作者在安排按键功能时别具匠心,在其它的键绑定中,也能看到h, j, k, l所代表的含义。
例如,使光标在多个窗口间上下左右移动的命令,就是CTRL-W h/j/k/l (:help CTRL-W_h…);
再如,上下左右移动窗口位置的命令,是CTRL-W H/J/K/L (:help CTRL-W_H…)。注意,这里的H, J, K, L是大写的。
2 [ 翻页 ]
在VIM中翻页,同样可以使用PageUp和PageDown,不过,像使用上下左右光标一样,你的手指会移出主键盘区。因此,我们通常使用CTRL-B和CTRL-F来进行翻页,它们的功能等同于PageUp和PageDown。CTRL-B和CTRL-F前也可以加上数字,来表示向上或向下翻多少页。
VIM中还可以向上或向下翻半页,翻指定的行数,参见scroll.txt帮助手册页。
3 [ 在文件中移动 ]
VIM提供了一些命令,可以方便的在文件中移动。
命令“gg”移动到文件的第一行,而命令“G”则移动到文件的最后一行。
命令“G”前可以加上数字,在这里,数字的含义并不是倍数,而是你打算跳转的行号。例如,你想跳转到文件的第1234行,只需输入“1234G”。
你还可以按百分比来跳转,例如,你想跳到文件的正中间,输入“50%”;如果想跳到75%处,输入“75%”。注意,你必须先输入一个数字,然后输入“%”。如果直接输入“%”,那含义就完全不同了。“:help N%”阅读更多细节。
在文件中移动,你可能会迷失自己的位置,这时使用“CTRL-G”命令,查看一下自己位置。这个命令会显示出光标的位置及其它信息。为了避免迷失,你可以打开行号显示;使用“set number”命令后,会在每一行前显示出行号,可以更方便的定位的跳转(:help 'number')。
4 [ 移动到指定字符 ]
上面的命令都是行间移动(除h, l外),也就是从当前行移动到另外一行。如果我们想在当前行内快速移动,可以使用f, t, F, T命令。
“f”命令移动到光标右边的指定字符上,例如,“fx”,会把移动到光标右边的第一个'x'字符上。“F”命令则反方向查找,也就是移动到光标左边的指定字符上。
“t”命令和“f”命令的区别在于,它移动到光标右边的指定字符之前。例如,“tx”会移动到光标右边第一个'x'字符的前面。“T”命令是“t”命令的反向版本,它移动到光标右边的指定字符之后。
这四个命令只在当前行中移动光标,光标不会跨越回车换行符。
可以在命令前面使用数字,表示倍数。例如,“3fx”表示移动到光标右边的第3个'x'字符上。
“;”命令重复前一次输入的f, t, F, T命令,而“,”命令会反方向重复前一次输入的f, t, F, T命令。这两个命令前也可以使用数字来表示倍数。
5 [ 行首/行尾 ]
在VIM中,移动到行首的命令非常简单,就是“0”,这个是数字0,而不是大写字母O。移动到行尾的命令是“$”。
另外还有一个命令“^”,用它可以移动到行首的第一个非空白字符。
在正则表达式中我们会看到,“^”字符代表行首,而“$”字符代表行尾。可见,VI/VIM的按键的安排,的确是别具匠心的。
6 [ 按单词移动 ]
我们知道,英文文档的主体是单词,通常用空白字符(包括空格、制表符和回车换行符)来分隔单词。VIM中提供了许多命令来按单词移动。
要根据单词来移动,首先要把文本分隔为一个个独立的单词。VIM在对单词进行分隔时,会把'iskeyword'选项中的字符做为单词的组成字符。也就是说,一个单词由'iskeyword'选项中定义的字符构成,它前面、后面的字符不在'iskeyword'选项定义的字符中。例如,如果我们把'iskeyword'选项设置为"a-z,A-Z,48-57,_",那么"FooBar_123"被做为一个单词,而"FooBar-123"被做为三个单词:"FooBar", "-"和"123"。"a-z,A-Z,48-57,_"中的48-57表示ASCII码表中的数字0-9。
VIM中,移动光标到下一个单词的词首,使用命令“w”,移动光标到上一个单词的词首,使用命令“b”;移动光标到下一个单词的结尾,用命令“e”,移动光标到上一个单词的结尾,使用命令“ge”。
上面这些命令都使用'iskeyword'选项中的字符来确定单词的分界,还有几个命令,只把空白字符当做“单词”的分界。当然,这里说的“单词”已经不是传统意义上的单词了,而是由非空白字符构成一串字串。命令“W”移动光标到下个字串的开始,命令“B”移动到上个字串的开始;命令“E”移动到下个字串的结尾,命令“gE”移动到上个字串的结尾。和上面的命令比较一下,发现什么规律没有?
7 [ H/M/L ]
注意,这几个命令是大写的。
使用H/M/L这三个键,可以让光标跳到当前窗口的顶部、中间、和底部,停留在第一个非空字符上。H命令和L命令前也可以加一个数字,但数字的含义不再是倍数,而是指距窗口顶部、底部的行数。例如,“3H”表示光标移动到距窗口顶部第3行的位置;“5L”表示光标移动到距窗口底部5行的位置。
8 [ 相对于光标滚屏 ]
在阅读代码时,有时我们需要根据光标所在的位置滚屏,把光标所在行移动窗口的顶端、中间或底部,这时就可以用到“zt”、“zz”和“zb”。这种滚屏方式相对于翻页来讲,它的好处在于,你能够始终以当前光标位置做为参照,不会出现翻几次页后,发现自己迷失了方向。 ^_^
9 [ 查找 ]
查找,也可以做为一种快速移动的方式。
在VIM中查找非常容易,直接在Normal模式下输入“/”,然后输入你想查询的字符串,回车,就跳转到第一个匹配的地方了。“/”是向下查找,而“?”进行反方向查找。命令“n”重复上一次的查找命令,而命令“N”也重复上一次的查找命令,只不过它按相反方向查找。
VIM保存了查找的历史记录,你可以在输入“/”或“?”后,用上、下光标键(或CTRL-P/CTRL-N)翻看历史记录,然后再次执行这个查找。
另外你还可以使用“q/”和“q?”命令,在VIM窗口最下面打开一个新的窗口,这个窗口会列出你的查找历史记录,你可以使用任何VIM编辑命令对此窗口的内容进行编辑,然后再按回车,就会对光标所在的行的内容进行查找。

在上图中,我使用“q/”命令打开了command-line窗口,这个窗口列出了我之前所查找的字符串。我现在想查找包含“check_swap”,于是先跳到第399行,把“check_tty”改为“check_swap”,然后按回车。此时VIM就去查找包含“check_swap”位置了。这个例子比较简单,你可能觉得command-line窗口没什么必要,但如果你要查找的内容是一个很长的正则表达式,你就会发现它非常有用了。
VIM中有许多与查找相关的选项设置,其中最常用的是'incsearch', 'hlsearch', 'ignorecase'。
'incsearch'表示在你输入查找内容的同时,VIM就开始对你输入的内容进行匹配,并显示匹配的位置。打开这个选项,你可以即时看到查找的结果。
'hlsearch'选项表示对匹配的所有项目进行高亮显示。
'ignorecase'选项表示在查找时忽略大小写。
通常我会打开'incsearch'和'hlsearch'选项,关闭'ignorecase'选项。
10 [ 利用跳转表 ]
在VIM中,很多命令可以引起跳转,VIM会记住把跳转前光标的位置记录到跳转表中,并提供了一些命令来根据跳转表进行跳转。要知道哪些命令引起跳转,参见“:help jump-motions”。
使用命令“''”(两个单引号)和“``”(两个反引号,在键盘上和“~”共用一个键)可以返回到最新的跳转位置。例如,当前光标位于文件中第1234行,然后我使用“G”命令跳转到第4321行;这时如果我按“''”或"``",就会跳回到1234行。
因为这两个命令也属于跳转命令,所以第4321行也被记入跳转表,如果你再次使用这两个命令,就会发现自己又跳回第4321行了。
这两个命令有一点不同,“``”在跳转时会精确到列,而“''”不会回到跳转时光标所在的那一列,而是把光标放在第一个非空白字符上。
如果想回到更老的跳转位置,使用命令“CTRL-O”;与它相对应的,是“CTRL-I”,它跳转到更新的跳转位置(:help CTRL-O和:help CTRL-I)。这两个命令前面可以加数字来表示倍数。
使用命令“:jumps”可以查看跳转表(:help :jumps)。
11 [ 使用标记 ]
标记(mark)是VIM提供的精确定位技术,其功能大概相当于GPS技术,只要你知道标记的名字,就可以使用命令直接跳转到该标记所在的位置。
VIM中的标记都有一个名字,这个名字用单一的字符表示。大写和小写字母(A-Za-z)都可以做为标记的名字,这些标志的位置可以由用户来设置;而数字标记0-9,以及一些标点符号标记,用户不能进行设置,由VIM来自动设置。
我们主要讲述字母标记的使用,对于数字标记和标点符号标记,请自行参阅帮助手册(:help mark-motions)。
小写字母标记局限于缓冲区,也就是说,每个缓冲区都可以定义自己的小写字母标记,各缓冲区间的小写字母标记彼此不干扰。如果我在文件A中设置一个标记t,然后在文件B中也可以设置一个标记t。那么在文件A中,可以用“'t”命令跳到文件A的标记t位置 ;在文件B中,可以用“'t”命令跳到文件B的标记t位置。如果文件在缓冲区列表中被删除,小写字母标记就丢失了。
大写字母标记是全局的,它在文件间都有效。如果在文件A中定义一个标记T,那么当使用命令“'T”时,就会跳到文件A的标记T位置,不管你当前处于哪个文件中。
设定一个标记很简单,使用命令“m{a-zA-Z}”就可以了。例如,命令“mt”在把当前光标位置设定为标记t;命令“mT”把当前光标位置设定为标记T。(:help m)
要跳转到指定的标记,使用命令“'{a-zA-Z}”或“`{a-zA-Z}”。例如,命令“'t”会跳转到标记t;命令“'T”会跳转到标记T。( :help ' )
单引号和反引号的区别和上面所讲的一样,“`”在跳转时会精确到列,而“'”不会回到跳转时光标所在的那一列,而是把光标放在第一个非空白字符上。
标记也可以被删除,使用命令“:delmarks”可以删除指定标记。命令“:marks”列出所有的标记。
关于标记,有两个非常有用的插件,一个是ShowMarks,另外一个叫marks browser。
ShowMarks是我最常用的插件之一,它使用VIM提供的sign功能以及高亮功能显示出标记的位置。这样,你在设定了一个标记后,它就会在你的VIM窗口中显示出标记的名字,并高亮这一行。
这个插件在这里下载,下载后,在你的$HOME/.vim目录把它解压:

在我的vimrc中,对ShowMarks进行了如下配置:
   """"""""""""""""""""""""""""""
   " showmarks setting
   """"""""""""""""""""""""""""""
   " Enable ShowMarks
   let showmarks_enable = 1
   " Show which marks
   let showmarks_include = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
   " Ignore help, quickfix, non-modifiable buffers
   let showmarks_ignore_type = "hqm"
   " Hilight lower & upper marks
   let showmarks_hlline_lower = 1
   let showmarks_hlline_upper = 1
首先,使能showmarks插件,然后定义showmarks只显示全部的大写标记和小写,并高亮这两种标记;对文件类型为help, quickfix, 和不可修改的缓冲区,不显示标记的位置。
你可以定义自己的颜色来高亮标记所在的行,下面是我的定义,我把它放在我自己的colorscheme文件中:
" For showmarks plugin
hi ShowMarksHLl ctermbg=Yellow   ctermfg=Black  guibg=#FFDB72    guifg=Black
hi ShowMarksHLu ctermbg=Magenta  ctermfg=Black  guibg=#FFB3FF    guifg=Black
ShowMarks插件中已经定义了一些快捷键:

mt   - 打开/关闭ShowMarks插件
mo   - 强制打开ShowMarks插件
mh   - 清除当前行的标记
ma   - 清除当前缓冲区中所有的标记
mm   - 在当前行打一个标记,使用下一个可用的标记名
我最常使用的是“mm”和“mh”,用起来非常方便。
在VIM 7.0中,如果大写的标记被定义了,那么函数line()无论在哪个缓冲区里都会返回该标记的行号,导致showmarks在每个缓冲区里都会把这个大写标记显示出来。因此我为这个插件打了个补丁来修正此问题。
VIM 7.0中也可以真正的删除一个mark标记,所以也改了showmarks插件的删除标记功能。原来的功能在删除标记时,并未真正删除它,只是把这个标记指向缓冲区的第一行;现在则是真正删除此标记。
补丁的内容如下:
--- easwy/showmarks.vim    2007-03-13 10:15:07.000000000 +0800
+++ plugin/showmarks.vim    2007-03-23 09:35:01.000000000 +0800
@@ -144,6 +144,25 @@
 hi default ShowMarksHLo ctermfg=darkblue ctermbg=blue cterm=bold guifg=blue guibg=lightblue gui=bold
 hi default ShowMarksHLm ctermfg=darkblue ctermbg=blue cterm=bold guifg=blue guibg=lightblue gui=bold
 
+" Function: GetMarkLine()
+" Authors: Easwy Yang
+" Description: This function will return the line number where the mark
+" placed. In VIM 7.0 and later, function line() always returns line number but
+" not 0 in case an uppercase mark or number mark is placed. However, in VIM 6,
+" it only returns 0 when the uppercase mark isn't placed in current file.
+fun! s:GetMarkLine(mark)
+    if v:version < 700
+        let lnum = line(a:mark)
+    else
+        let pos = getpos(a:mark)
+        let lnum = pos[1]
+        if pos[0] && bufnr("%") != pos[0]
+            let lnum = 0
+        endif
+    endif
+    return lnum
+endf
+
 " Function: IncludeMarks()
 " Description: This function returns the list of marks (in priority order) to
 " show in this buffer.  Each buffer, if not already set, inherits the global
@@ -354,7 +373,8 @@
         let c = strpart(s:IncludeMarks(), n, 1)
         let nm = s:NameOfMark(c)
         let id = n + (s:maxmarks * winbufnr(0))
-        let ln = line("'".c)
+        "let ln = line("'".c)
+        let ln = s:GetMarkLine("'".c)
 
         if ln == 0 && (exists('b:placed_'.nm) && b:placed_{nm} != ln)
             exe 'sign unplace '.id.' buffer='.winbufnr(0)
@@ -393,11 +413,18 @@
     let s:maxmarks = strlen(s:IncludeMarks())
     while n < s:maxmarks
         let c = strpart(s:IncludeMarks(), n, 1)
-        if c =~# '[a-zA-Z]' && ln == line("'".c)
+        "if c =~# '[a-zA-Z]' && ln == line("'".c)
+        if c =~# '[a-zA-Z]' && ln == s:GetMarkLine("'".c)
             let nm = s:NameOfMark(c)
             let id = n + (s:maxmarks * winbufnr(0))
             exe 'sign unplace '.id.' buffer='.winbufnr(0)
-            exe '1 mark '.c
+            " Easwy, we can really remove marks in VIM 7.0 and later
+            if v:version >= 700
+                exe 'delm '.c
+            else
+                exe '1 mark '.c
+            endif
+            " Easwy, end
             let b:placed_{nm} = 1
         endif
         let n = n + 1
@@ -417,7 +444,13 @@
             let nm = s:NameOfMark(c)
             let id = n + (s:maxmarks * winbufnr(0))
             exe 'sign unplace '.id.' buffer='.winbufnr(0)
-            exe '1 mark '.c
+            " Easwy, we can really remove marks in VIM 7.0 and later
+            if v:version >= 700
+                exe 'delm '.c
+            else
+                exe '1 mark '.c
+            endif
+            " Easwy, end
             let b:placed_{nm} = 1
         endif
         let n = n + 1
@@ -466,7 +499,8 @@
     while n < s:maxmarks
         let c = strpart(s:IncludeMarks(), n, 1)
         if c =~# '[a-z]'
-            if line("'".c) <= 1
+            "if line("'".c) <= 1
+            if s:GetMarkLine("'".c) <= 1
                 " Found an unused [a-z] mark; we're done.
                 let next_mark = n
                 break
用法:
1. 保存该patch到某一目录,例如:/tmp/showmarks.vim.patch
2. cd到你的.vim目录:cd ~/.vim
3. 运行命令:cat /tmp/showmarks.vim.patch | patch -p0
Marks Browser可以显示出当前缓冲区中定义的小写标记的位置,在你无法对应上标记的名字和其位置时,非常有用。这个插件在此下载:

下载后把它放到你的$HOME/.vim/plugin目录即可,我为其定义了一个快捷键:
   """"""""""""""""""""""""""""""
   " markbrowser setting
   """"""""""""""""""""""""""""""
   nmap mk :MarksBrowser
这样,直接使用“,mk”就可以打开Mark Browser窗口了。
下图显示这两个插件工作时的效果。我在文件中定义了三个标记,一个大写标记A,两个小写标记a和t。最上面的窗口是Mark Browser窗口,主编辑窗口中的高亮行及sign标记是ShowMarks插件放置的。
 
12 [ 折行 ]
在文件比较大时,在文件中移动也许会比较费力。这个时候,你可以根据自己的需要把暂时不会访问的文本折叠起来,既减少了对空间的占用,移动速度也会快很多。
VIM提供了多种方法来进行折叠,既可以手动折叠,也可以根据缩进、语法,或使用表达式来进行折叠。
程序文件一般都具有良好的结构,所以根据语法进行折叠是一个不错的选择。
要启用折叠,首先要使能'foldenable'选项,这个选项是局部于窗口的选项,因此可以为每个窗口定义不同的折叠。
接下来,设置'foldmethod'选项,对于程序,我们可以选择根据语法高亮进行折叠。需注意的,要根据语法高亮进行折叠,必须打开文件类型检测和语法高亮功能,请参见我前面的文章。
下面是我的vimrc中的设置,它使用了自动命令,如果发现文件类型为c或cpp,就启用折叠功能,并按语法进行折叠:
autocmd FileType c,cpp  setl fdm=syntax | setl fen
注意,VIM的很多命令、选项名都有简写形式,在帮助手册中可以看到简写形式,也可以按简写形式来help,例如,要查看'foldmethod'选项的帮助,可以只输入“:help 'fdm'”。
折叠后的效果见下图:
 
图中以黑色背景显示的行就是被折叠起来的行,VIM会显示这个fold中被折叠了多少行,以及起始行的内容。留意一下左下方的“__Tag_List__”窗口,在这个窗口中也存在着折叠,我把macro, typedef, variable几项折叠起来了,而把function的折叠打开。从该窗口最左边的折叠栏(:help fold-foldcolumn)也可以看出不同:被折叠的文本前显示了"+",打开的折叠前显示的是"|"。
折叠的背景色及显示文字等都可以修改,参阅帮助手册(:help folding)。
下面的命令用来打开和关闭折叠:
zo – 打开光标下的折叠
zO – 循环打开光标下的折叠,也就是说,如果存在多级折叠,每一级都会被打开
zc – 关闭光标下的折叠
zC – 循环关闭光标下的折叠
更多的命令,请参阅手册。
VIM提供了一些命令在折叠间快速移动:
[z – 到当前打开折叠的开始
]z – 到当前打开折叠的结束
zj – 向下移动到下一个折叠的开始处
zk – 向上移动到上一个折叠的结束处
我通常不喜欢把文本折叠起来,因为我更喜欢一目了然的看到全部文本。你可以根据自己的喜好来决定是否启用折叠。
多说一点,手动创建的折叠是可以保存在session文件,这样下次进入VIM时可以载入之前创建的折叠,参见:help 'sessionoptions'。
13 [ 在程序中移动 ]
VIM的作者是一个程序员,这就不难理解为什么VIM提供了众多在程序中移动的命令。这里面既包括我们前面的文章中介绍过的利用tag文件及cscope在标签间跳转,也包括众多在函数、注释、预处理指令、程序段,及其它程序元素中移动的命令。
本文不再详细介绍这些命令,作为程序员,一定要熟读usr_29.txt!这些命令,可以帮助你在程序中得心应手的移动。
 
在这里介绍两个插件,增强了在程序中移动的功能,一个是a.vim,另外一个是matchit

a.vim的功能非常简单,它帮助你在源文件和头文件间进行切换,这个简单的功能,却非常实用,至少它为我节省了很多时间。
在此下载a.vim插件:
       
然后把它放到你的.vim/plugin目录就可以了。
假设你正在浏览C语言的源文件,这时想修改它对应的头文件,只需要输入“:A”命令,就切换到头文件了(需要源文件和头文件在同一目录中)。a.vim插件还定义了其它一些命令和快捷键,参见它的帮助。
 
在VIM中,"%"命令跳转到与当前项目相匹配的项目。例如,当光标位置在“{”时,按下%,光标就跳转到对应的“}”( :help %)。
但VIM提供的%命令,只能在括号,或者C注释的开始和结束( /*  */),或者C编译预处理指令间进行跳转。对于其它程序结构,例如HTML,%命令不能从标记,跳转到对应的标记。
Matchit插件则扩展了%命令的功能,使%命令可以对其它程序语言的开始和结束标记间进行跳转。在此处下载matchit插件:
       
把这个插件放到你的.vim/plugin目录,你就可以用%在各种开始/结束标记间跳转了,目前,它可以支持Ada, ASP with VBS, Csh, DTD, Essbase, Fortran, HTML, JSP (same as HTML), LaTeX, Lua, Pascal, SGML, Shell, Tcsh, Vim, XML等语言。
14 [ 插入模式下的移动 ]
上面介绍的移动命令,都是在normal模式下使用的,如果想在insert模式下移动,阅读:help ins-special-special。
你真的需要在插入模式下移动吗?我几乎不会!通常我会先按ESC返回Normal模式,然后再移动,当你习惯了以后,你会发现效率会更高。
15 [ 小结 ]
你会发现,本文的内容,和usr_03.txt帮助文档很相似。是的,只要你学会了usr_03.txt中列出的命令,你就掌握了最常用最实用的VIM移动命令。
如果你想了解更多的移动命令,请通篇阅读motion.txt,记住你最有可能用到的那些键。当你的手指能够不假思索的使用这些命令后,你在VIM中就能做到指随意动、移动如飞了
 


1. 折叠方式
可用选项 'foldmethod' 来设定折叠方式: set fdm=*****
有 6 种方法来选定折叠:
          manual           手工定义折叠
          indent             更多的缩进表示更高级别的折叠
          expr                用表达式来定义折叠
          syntax             用语法高亮来定义折叠
          diff                  对没有更改的文本进行折叠
          marker            对文中的标志折叠
注意,每一种折叠方式不兼容,如不能即用expr又用marker方式,我主要轮流使用indent和marker方式进行折叠。
使用时,用:set fdm=marker 命令来设置成marker折叠方式(fdm是foldmethod的缩写)。
要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=syntax,就像添加其它的初始化设置一样。
2. 折叠命令
选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用indent和marker稍微多一些,故以它们的使用为例:
如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。
在可折叠处(大括号中间):
zc      折叠
zC     对所在范围内所有嵌套的折叠点进行折叠
zo      展开折叠
zO     对所在范围内所有嵌套的折叠点展开
[z       到当前打开的折叠的开始处。
]z       到当前打开的折叠的末尾处。
zj       向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk      向上移动到前一折叠的结束处。关闭的折叠也被计入。
当使用marker方式时,需要用标计来标识代码的折叠,系统默认是{{{和}}},最好不要改动之:)
我们可以使用下面的命令来创建和删除折叠:
zf      创建折叠,比如在marker方式下:
                   zf56G,创建从当前行起到56行的代码折叠;
                   10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
                   10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
                   在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。
zd      删除 (delete) 在光标下的折叠。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zD     循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。
          仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zE     除去 (Eliminate) 窗口里“所有”的折叠。
          仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
 
阅读(862) | 评论(1) | 转发(0) |
0

上一篇:linux c 组播编程

下一篇:dch的使用

给主人留下些什么吧!~~

chinaunix网友2009-06-08 22:16:50

zz 也要说明出处啊