vim(六) 折疊
来源:互联网 发布:网络套现平台那个好 编辑:程序博客网 时间:2024/06/09 17:37
11. 把 Vim 折疊(folding)?
把 Vim 折疊(folding)後,然後可以放入口袋?呵呵,當然不是這樣啦!這是Vim 的一個很特殊功能(原始 vi 及一般的 vi clone 皆無此功能)。簡單的說,就是可以將文章內容,依據他的結構,把多行內容集中於其中一個代表行來顯示,螢幕上只看得到章節標題那一代表行,這樣整個文章結構就一目了然,真正要閱讀其他內容時,再由簡單的按鍵或滑鼠來打開。這對於不含目錄結構的文件或程式碼很有用處。
11.1 手動折疊
折疊的行為表現是由 foldmethod[fdm] 這個設定項來控制的,這個設定項預設是 manual,就是手動設定,這是本節所要敘述的最基本折疊方式。其他折疊方式會在下一節介紹,折疊的方式,其中會有互相衝突的地方,使用上請注意一下。
11.1.1 折疊的產生
手動產生折疊的指令是 zf、zF、:fo[ld],以下以例子來說明較清楚。
zfap將游標所在處的那個段落折疊成一行。zf7G自游標所在處至全文第 7 行折疊起來。:3,9fold將第 3 行至第 7 行折疊起來。5zF將游標所在處起算 5 行的內容折疊起來。也可以將所要折疊的部份以 Shift+v 標記起來,然以按 zf 就會將標記的內容折疊起來。
11.1.2 折疊的操作
zo將游標所在處的折疊打開。open。zc將游標所在處已打開的內容再度折疊起來。close。zr將全文的所有折疊依層次通通打開。reduce。zm將全文已打開的折疊依層次通通再折疊起來。more。zR作用和 zr 同,但會打開含巢狀折疊(折疊中又還有折疊)的所有折疊。zM作用和 zm 同,但對於巢狀折疊亦有作用。zi這是個切換,是折疊與不折疊指令間的切換。zn打開全文的所有折疊。fold none。zN這是 zn 的相對指令,回復所有的折疊。那這個 zn 和 zR 不是都一樣嗎?不是的,zR 的作用於 foldlevel 這個設定項,是控制折疊的層次,而 zn 則是作用於 foldenable 這個設定項,他是不管層次的,只有全關或全開。當然,所得到的結果有許多情形下是一樣的,但裡子不一樣,這在寫Vim script 時得小心分辨。
通常,游標在折疊處向左或向右移的話,折疊也會自動打開。在進入編輯模式,例如按 i 或 o,這是也會自動打開折疊。
其他的複製、刪除及替換等動作還是可以和一般正常文稿一樣的操作,例如 dd 就會刪掉一整個折疊,yy 會複製一整個折疊,p 會貼上一整個折疊。把整個折疊就當做是一行就行了。
11.1.3 折疊的記憶
手動折疊,在下一次開檔時就消失了,但我們可以使用 :mkview 把折疊的情形記憶起來,下一次載入同一個檔案時就可以下 :loadview,記憶起以前折疊的情況。當然,使用手動折疊及記憶,在操作上並不是很方便,除非是把他寫成Vim script 來叫用。因此下一節要談到自動折疊,這可能會比較實用一點。
11.2 自動折疊
這裡比較實用的是依文件內的標誌來折疊,因此其他的方式就只稍微介紹了。
11.2.1 以縮行為依據
:set foldmethod=indent 就會依縮行來折疊,本來預設是 :set foldmethod=normal。請注意,此時手動折疊的設定會被停止無法使用。
11.2.2 以特殊的表示法為依據
:set foldmethod=expr,另外還要設定 :set foldexpr=...,可參考線上使用手冊 :h fold-expr 的例子。
11.2.3 以語法為依據
這是在定義語法(syntax)檔時同時加入折疊的定義。然後,set foldmethod=syntax 就會依照這個語法定義檔去折疊,請 :h syn-fold。
11.2.4 以是否更改過為依據
這在進入 vimdiff(即 vim -d file1 file2) 時會自動進入 foldmethod=diff 的模式,因此要diff 設定項設在同一個螢幕顯示才行。以便整體的瀏覽。當然要自行更改預設值亦可。預設是:
setlocal diff foldmethod=diff scrollbind nowrap foldlevel=1
這樣一來,兩個檔案相同的部份會折疊起來,沒有折疊的部份就是有差異的地方。
11.2.5 以文件上的標誌為依據
這是跟據文章中的標誌(marker)來做折疊。這些標誌,起於 {{{,止於 }}},這中間的部份會折疊起來。通常這些標誌是藏在註解欄裡頭,例如 C 程式碼的 /* 及 */ 之間,shell script 的 # 之後,Vim script 的 " 之後,得視程式語言的不同而定,因此一般的文章就不適合使用了。
這些預設的標誌也可以由 foldmarker 來更改,但為了文件的流通性,建議使用預設值就可以了。
當然,一些程式碼載入時再來設定 :set foldmethod=marker 就太麻煩了,這個設定可以設在文件內,例如:
#!/bin/sh# 這是一個 sh script# {{{……這裡是 script 內容,由 vim 打開這個檔時,這個部份會自動折疊起來。……# }}}# vim:fdm=marker:ts=2http://edt1023.sayya.org/vim/node12.html
- vim(六) 折疊
- Vim 隨手寫(六)
- Vim (六) 命令行模式
- 六、VIM 安装、使用
- Vim的使用(六)
- 六、VIM使用手册--在vim中加载插件taglist
- linux笔记六(vim 程序编辑器)
- Vim实战指南(六):环境偏好配置
- vim+python+OpenCV学习六 : 形态学初级
- vim+python+OpenCV学习六 : 滤波初级
- VIM快捷(六):恢复、撤销
- Vim入门(六):行的光标移动
- linux 自学笔记 (六) 文本编辑器 Vim/Vi
- Linux学习笔记(六)terminal与vim配色
- Vim试水之六:NerdTree插件安装
- Linux运维+系统服务搭建(六)vim编辑器用法
- linux 笔记(六)(vim编辑器 用户管理)
- vim
- windows 远程连接 快捷键
- redhat 古老版本下载网站
- 设计工作室搜集
- 读懂我的文章,看透你的心
- VMware下的Linux系统中Windows的共享目录,不支持创建软连接
- vim(六) 折疊
- vs2010中moc文件生成方法(含有截图)
- websphere 修改主机名(版本: 7.0.0.19)
- SQL SERVER 2008 R2序列号
- java中三种简单的加密
- 解题报告-HDU 3662 (三维凸包)
- Activity界面的数字时间表
- Android Handler
- Groovy的list和map