大家來學 Vim

看 Pear DB.php 正好看到一個折疊的功能(一直以為這是書籤的功能).. 覺得超強的...
就仔細找了一下.. 又發現了這個好站...
大家來學 Vim
大家來學VIM(一個歷久彌新的編輯器)
目錄 大家來學 Vim 一個歷久彌新的編輯器
手動折疊


轉載自 手動折疊
轉載一些比較會用到的..
zfap 將游標所在處的那個段落折疊成一行。
zf7G 自游標所在處至全文第 7 行折疊起來。
:3,9fold 將第 3 行至第 7 行折疊起來。
5zF 將游標所在處起算 5 行的內容折疊起來。
也可以將所要折疊的部份以 Shift+v 標記起來,然以按 zf 就會將標記的內容折疊起來。
折疊的操作
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 會貼上一整個折疊。把整個折疊就當做是一行就行了。
以縮行為依據
:set foldmethod=indent 就會依縮行來折疊,本來預設是 :set foldmethod=normal。請注意,此時手動折疊的設定會被停止無法使用。
以下轉載自 set 功能設定
fileformat(ff)
這是寫入檔案時置放 EOL(end of line) 的形式
dos 是以 0D 0A 來斷行。
unix 是以 0A 來斷行。
mac 是以 0D 來斷行。
預設以各系統平檯而定,在 Linux 當然是 unix 形式。
fileformats(ffs)
可指定多個,會依載入的檔案形式來調整 ff。
例如 :set ffs=unix,dos ff=unix
則預設為 unix 格式,但如讀入的是 dos 格式的檔案,會自動調整
為 dos 格式,這樣存檔時就會以 dos 格式存檔(狀態列會顯示)。
。此時如要改成 unix 格式,可 set ff=unix 然後存檔就會轉成
unix 格式,反之亦然。
‧如果不這樣設,也就是您不管 ff 或 ffs 都設成 unix,那讀入 dos 格式的檔案時在每行尾會出現 ^M 這個字元(就是 0D 啦!)這時縱使 :set ff=unix 也來不及了!只好 :%s/^M//g 來消去這個 ^M。ㄟ,還記得怎麼替換嗎?就是把 ^M 換成沒有啦!而且 ^M 怎麼打出來的還記得吧!翻一翻前面的單元吧!
‧Hey,你怎麼知道是 0D 呀!好吧!告訴您一個密秘,您把游標移到 ^M 那個位置,然後按 ga 在狀態列就會顯示 10,16,8 進位的值。其它的字元也是可以如此顯示。a 就是 ascii 的意思。但這是 vim 的擴充功能,elvis 沒有。
‧elvis 縱使載入 dos 格式的檔案,也是會自動把 ^M 隱藏起來。
在你想切換十六進位碼的地方按 ga 就會在最下面出現十六進位的碼唷 🙂
整頁面成十六進位的碼
:%!xxd
還原.
:%!xxd -r
下面這行可以讓 term 中的vi 使用滑鼠輔助
:set mouse=a
在貼程式碼時如果發現到整個程式碼都往右移的話..
整個讓他自己再重新排列的快速鍵是 =ggG
gg 到最上面, G 到最下面.
或用 v 去 make 起來後, 直接按 = 就可以把要重排那段重新排列.
以下的是文字檔的排列方式.
簡單重排功能
:ce(nter) 本行文字置中。注意是冒號命令!
:ri(ght) 本行文字靠右。
:le(ft) 本行文字靠左。所謂置中、靠左右,是參考 textwidth(tw) 的設定。如果 tw 沒有設定,預設是80,就是以 80 個字元為總寬度為標準來置放。當然您也可以如 sw 一樣馬上重設。
gqap 整段重排,或 gqip,在段落中位何地方都可以使用。和中文的配合見下述。
gqq 本行重排。
gqQ 全文重排,是以游標所在處的段落開始重排至檔尾。以空白行為段落的間隔。
gq3q => 重排三行
gq2ap => 重排兩個段落
gq5j => 重排游標以下五行(別忘了 j 是向下移動,5j 就是向下移動五行,包括游標所在處就是六行)
現在在檔案中要刪掉 第 33-44 行.
在 vi 裡面要這樣下
:33,44d
想要在make 後把那些行數都前面都加 tab
make後 按 "shift + >" 就可以了.
10行到12行兩次縮排
:10,12>>
小小一行,受用無窮(將code轉換成html)
:runtime! syntax/2html.vim
去除DOS 產生的文字檔^M
1. cat dosfile | col -b > unixfile
2. vim dosfile
:s/^V^M//g
^V^M 意思就是 Ctrl+V and Ctrl+M 照這樣子按. 就會出現 ^M 了~
全部取代
:1,$s/^V^M//g
=========================================
關於 vim 如果字太長會自動被斷行.
但是又很想按個下就到要到的地方. 那到底該怎麼弄呢??
最簡單的作法是 按g 再按 j (或向下鍵) 就可以向下,同理. 按g 再向上就是向上的.
而有另一種作法. 寫 map.
:map j gj
:map k gk
意思是 我每次按 j 就等於是按 gj 的意思.(就是按 g 再按下的意思)
map 很好用.. 甚至可以用來做 gcc compile 快速鍵等等的... :p
=========================================
平常都是
:sp filename 會橫項切割兩個視窗來開檔案
:vsp filename 是直項切割視窗.
但是不想要切割視窗又想能同時編輯兩個檔案怎麼辦呢?
這時後就用 :e 了.
:e filename 會在另一個視窗新開一個 filename.
而要切換只要 :e # 或最簡單的就是 ^6 (Ctrl + 6) 就可以切換囉.
:sp 視窗放大縮小可以用
Ctrl-w +(放大)
Ctrl-w -(縮小)
Ctrl-w _(放到最大)
Ctrl-w =(回復各一半)
:vsp 視窗放大縮小可用
Ctrl-w |(放到最大)
Ctrl-w =(回復各一半)
=========================================
ggyG 可以複制全部的內容
=========================================
若 for() {
} 現在在 "}" 這邊, 想要看他對應到上面哪個 "{"
就按 % 就可以看到對應的 括號了.
=========================================
幾乎所有的 OS 及軟體都設定 Tab 就是 8 個字元長,這已經是個公認值,您硬要去改變它的話恐怕帶來許多不便,但實際上關於程式風格,許多人又認為 8 個字元太長了,幾個巢狀迴圈下來就需折行,反而不方便。因此 vim 體貼您,內建了 softtabstop 的功能,就是由 vim 來代您製造出一個假的 Tab,實際上是空白字元組成的 Tab。
set softtabstop=4
set shiftwidth=4
這樣會由 4 個空白字元取代一個 Tab,您按 Tab 鍵 vim 就跳 4 格,需注意的是,如果您按了三次 Tab 鍵,那就是一個實際的 Tab 加上四個空白字元,可不是 12 個空白字元喔!是混合 Tab 及 space 的。
問題來了!那我要按真正的 8 字元的 Tab 時怎麼辦?簡單,還記得怎麼按特殊字元嗎? Ctrl-v Tab 或 Ctrl-v I 就可以了,那就是如假包換的 8 字元長之 Tab。當然,您按兩次 Tab 不就得了!:-)
tab 按連按兩次. 就是 tab 而不是空白了.(再找找有沒有什麼是永遠一定是空白的)
=========================================
u 是回復. 但是回復過頭該怎麼辦?
^r 就可以囉 🙂
x 是刪除後面的字元. 想刪除前面的.
就用 X
=========================================
=========================================
=========================================


關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 教學文件。將永久鏈結加入書籤。

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料