轉載本站文章請注明,轉載自:扶凱[http://www.php-oa.com]
本文鏈接: http://www.php-oa.com/2009/10/15/vim.html
vim是一個(gè)很強大,很方便的編輯器,有編輯器之王的美名.也是相當的方便.但大家可不要拿他當windows的記事本用,不然他連記事本都不如 哦.下面是我扶凱常用的一些小技巧.和大家分享.當然,大家有什么好的技巧,可一定要記的分享給我.
(1. 快速打開(kāi)文件
當我們使用 ls 之類(lèi)的命令,定位了一個(gè)文件時(shí),我們可以在使用 vi 時(shí),不在使用全路徑。
例如
ls /etc/resolv.confvim !$
(2. vim的代碼折疊
這個(gè)功能相當的強大,如下圖.可能給一個(gè)子函數(也可以是代碼塊)折疊起來(lái).有關(guān)折疊不同的語(yǔ)言也不一樣,因為標記不一樣
在vim中的折疊方式,可用選項 ‘foldmethod’ 來(lái)設定折疊方式:set fdm=*****。
有 6 種方法來(lái)選定折疊:
manual 手工定義折疊
indent 更多的縮進(jìn)表示更高級別的折疊
expr 用表達式來(lái)定義折疊
syntax 用語(yǔ)法高亮來(lái)定義折疊
diff 對沒(méi)有更改的文本進(jìn)行折疊
marker 對文中的標志折疊
象我是用set fdm=marker,然后我自己寫(xiě)的vim的折疊代碼,讓他自動(dòng)折疊perl的子函數,只要是sub name {} 都折疊

常用的折疊快捷鍵
zf 創(chuàng )建折疊(使用數字表示創(chuàng )建有當前行到下多少行的折疊,比如3j就創(chuàng )建包括4行的折疊)
zo 打開(kāi)折疊(l也可以打開(kāi)折疊)
zc 關(guān)閉當前折疊
zm 關(guān)閉所有折疊
zr 打開(kāi)所有折疊
zE 刪除所有折疊
zd 刪除當前折疊
za 若當前打開(kāi)則關(guān)閉,若當前關(guān)閉則打開(kāi)
zj 到下一折疊的開(kāi)始處
zk 到上一折疊的末尾
讓vim支持查看函數列表
圖形界面下的很多編輯軟件都可以列出當前編輯文件中的函數列表,以便在編輯的時(shí)候能夠快速的跳轉。其實(shí)VIM也可以很好的實(shí)現的
首先還是安裝新的Exuberant Ctags
apt-get install exuberant-ctags。
要顯示的話(huà),還需要下載下載taglist_45.zip,解壓到home目錄下的.vim子目錄中:
http://www.vim.org/scripts/script.php?script_id=273
mkdir ~/.vim
cd ~/.vim
unzip taglist_45.zip

用法:
:helptags . #建立生成文件的索引,然后才能正常使用幫助
:TlistToggle #命令切換函數列表的開(kāi)、關(guān)。按ctrl鍵然后按兩下w鍵在正常編輯區域和tags區域中切換。
常用的幾項.vimrc設置:
把方法列表放在屏幕的右側 let Tlist_Use_Right_Window=1
讓當前不被編輯的文件的方法列表自動(dòng)折疊起來(lái),這樣可以節約一些屏幕空間 let Tlist_File_Fold_Auto_Close=1
vim中使用標記在程序中移動(dòng)
Vim 允許你在文本中放置自定義的標記。命令 “ma” 用 a 標記當前的光標位置。你可以在文本中使用 26 個(gè)標記 (a 到 z)。這些標記是不可見(jiàn)的,只是一個(gè)由 Vim 記住的位置。
要跳到一個(gè)你定義的標記,可以使用命令 `{mark},這里 {mark} 是指定義標記的那個(gè)字母。
ma 把當前位置存成標簽a
`a 移到跳轉到標記 a處
:marks 取得所有的標記的列表
到有一些特殊的標記,包括:
‘ 跳轉前的光標位置
“ 最后編輯的光標位置
[ 最后修改的開(kāi)始位置
] 最后修改的結束位置
注:mark僅在當前文件跳轉有效,jumps可在多個(gè)文件之間來(lái)回跳轉
多行操作列模式ctrl+v,(我超級喜歡的一個(gè)功能)
這個(gè)可是我請教Flw王大師學(xué)來(lái)的.
ctrl+v進(jìn)入列模式,上下左右選擇塊,然后按大寫(xiě)的I,插入注釋符#之類(lèi)也可以按dd刪除

模式行(modeline)
編輯文件時(shí)常常指定一些選項,比如縮進(jìn)量、是否將制表符轉換成空格等.我想沒(méi)人愿意每次進(jìn)入一個(gè)vim都手工輸入一大堆的 Tab 和縮進(jìn)設定。換了新的機器修改文件原有的設置就丟失了,還有如果我編輯的代碼不止一種風(fēng)格呢?——考慮一下,如果你參加開(kāi)源軟件項目,你能保證你參加的所 有項目,還有你公司里的軟件項目,代碼風(fēng)格都一樣嗎?
為了解決這些文件,有VIM中有一個(gè)VIM可以識別文件中的特殊行.這個(gè)特性在 Vim 中叫做模式行.Vim 是我用過(guò)的第一個(gè)支持在文件中記錄代碼風(fēng)格設定的編輯器。實(shí)際上,它所做的是在打開(kāi)文件時(shí)根據文件中的 Vim 指令設定相關(guān)的 Vim 選項。下面就是一個(gè)嵌
在 C 源代碼中的模式行:
/* vim: set tabstop=4 shiftwidth=4 expandtab: */
下面這個(gè)是perl的模式行
#vi:set tw=0 ts=8 sw=8 noet nowrap ft=c fdm=syntax nobackup tabstop=4 shiftwidth=4 foldmethod=marker: #
模式行有好幾種形式。行首的“/*”和尾部的“*/”告訴 C 編譯器這是一行注釋?zhuān)皇谴a的一部分;而 Vim 可通過(guò)后面的“vim:”識別出模式行的開(kāi)始(必須出現在行首或前面有一個(gè)空白字符);后面則是“set”和空格間隔開(kāi)的一串 Vim 選項;“:”表示模式行結束。
這種方式非常簡(jiǎn)單,功能也非常強大。另外請注意,出于安全的考慮,模式行中的選項只影響當前文件(“:help modeline-local”),也不能做任何設置選項以外的工作。
也許你會(huì )覺(jué)得這些很有用的小功能:
改變窗口命令
ctrl+w s 水平分割窗口
ctrl+w w 切換窗口
ctrl+w q 退出當前窗口(由于同時(shí)有多個(gè)文件,此命令不會(huì )影響其他窗口)
ctrl+w v 垂直分割窗口
shift+% 跳轉到與之匹配的括號處
. 重復上次的修改命令
`. 跳轉到最近修改過(guò)的位置
ga 顯示光標下的字符在當前使用的 encoding 下的內碼
guw 光標下的單詞變?yōu)樾?xiě)
gUw 光標下的單詞變?yōu)榇髮?xiě)
set list 顯示vim中所有的特殊符號
VIM 用空格替換 Tab
:set ts=4
:set expandtab
:%retab
我的vim配置
set tabstop=4 #制表符的寬度為4個(gè)空格
set expandtab #Tab 鍵時(shí)使用空格替代
set shiftwidth=4 #縮進(jìn)的空格數為4個(gè)空格
set nocompatible #將使 vim 以比默認的 vi 兼容模式功能更強的方式運行
set fdm=marker #代碼折疊
let &termencoding=&encoding #語(yǔ)言支持
set fileencodings=utf-8,gbk,ucs-bom,cp936 #對語(yǔ)言的支持,utf8和gbk之類(lèi)
colorscheme delek #vim的高亮的彩色,我喜歡用這個(gè)
au BufReadPost * if line(“‘\”") > 0|if line(“‘\”") <= line(“$”)|exe(“norm ‘\”")|else|exe “norm $”|endif|endif #打開(kāi)文件時(shí),按照 viminfo 保存的上次關(guān)閉時(shí)的光標位置重新設置光標

