vim的自動完成
我食言了,上一篇文章發完後,我還是一直在搞vim的設定,基本上都是在弄自動完成的部份,我是很希望弄到像Visual Studio新版那樣,邊打字選項就會邊過濾,物件的結構程式也都會知道,要拿物件的屬性時,自動完成也能正確顯示選擇,就這樣弄了好一陣子,昨天晚上我終於成功了,不過又遇到syntax complete在windows會出錯的奇怪現象,一直搞到凌晨四點,連CLANNAD都忘了看還是沒有解決,一直到今天才成功迴避這個錯誤。
現在我vim關於自動完成相關的plugin有四個:supertab、snippetsEmu、OmniCppCompletion、autocomplpop。supertab是用Tab鍵觸發自動完成功能用的,本來要使用Omni Auto Completion要先按Ctrl+X再按Ctrl+O,很不方便。snippetsEmu則是用關鍵字完成一段預先設定的內容,舉例來說,我只要輸入"doc4s",再按Tab就可以插入完整的HTML 4 Strict文件宣告,這功能可以減少很多重複的工作,像是if迴圈、for迴圈都可以用這個功能來快速完成。這兩個我之前都有介紹過,而剩下的兩個剛好就一個完成我的一個需求,OmniCppCompletion讓我可以在編寫物件導向程式時有更完整的自動完成功能,autocomplpop讓自動完成的選項在你輸入時就自動出現,並且隨著你輸入的內容不斷過濾選項。
閱讀 「vim的自動完成」 全文 貳月 29我現在的Vim設定
這兩三天都沒在寫code,反而又再次弄起了Vim設定,一開始的目標是讓之前的Tab鍵自動完成的功能和snippet(想知道snippet是什麼的可以看看c9s的在 Vim 上使用 Slippery Snippet這篇文章,裡面有一段影片),雖然沒學過Vim的script,不過我還是下去翻snippetEmu的原始碼,結果發現到它會判斷有沒有安裝supertab這個plugin,我才發現原來supertab就是Tab鍵觸發自動完成,把它裝起來就達成我的需求,一下子省事不少。之後我又升級了snippetEmu到最新版,還裝了安裝新版snippetEmu所用的vbs檔所需要的Vimball外掛,另外之前就會用到的還有The NERD Commenter,這些東西已經能滿足我目前的大部分需求了,應該好一陣子不會修改設定,接下來需要記住多些指令才行。
壹月 23gVim設定完成
最近幾天都在調整家裏和學校電腦的gVim設定,離上次在Windows上用Vim已經好一陣子了,這段時間都是用MadEdit來做為主要的編輯器,不過MadEdit對我來說還有幾個缺點,第一是同時開太多檔案會出錯,第二是預設背景色是白的,要整個重新設定很麻煩,所以最近又重新把Vim裝起來,調整他的設定檔,現在已經調到差不多了,其實還有一些目標想達成,不過還不算必要,而且還找不太到資料,所以就先暫緩。這次我是使用Cornelius的Enhanced Vim Package for Windows為基礎,多加入我之前的一些設定和這次找到的新設定,最後挑了一組還不錯的顏色,然後簡單修改一下,中間比較辛苦的是在字型設定的部份,還好Tiberius剛好發表了程設字型新歡 Inconsolata這篇文章,剛好切中我的問題所在,真是如有神助XD。
在功能的加強上,我找到讓Omni Auto Completion變得更簡單的方法了,之前也說過要Ctrl+x, Ctrl+n兩次組合鍵實在很麻煩,沒想到我在網路上搜尋的過程中,意外發現到這個設定檔,節錄自動完成的部份過來如下:
" Omni補完関連
" $VIMRUNTIME/autoload/htmlcomplete.vimの645行目をコメントアウントしておくとhtmlの補完が小文字になる
set completeopt=menu,preview,menuone " 補完表示設定
" TabでOmni補完及びポップアップメニューの選択
function InsertTabWrapper(is_shift)
if pumvisible()
return a:is_shift ? "\<C-p>" : "\<C-n>"
endif
let col = col('.') - 1
if !col || getline('.')[col - 1] !~ '\k\|<\|/' " htmlで補完できるように<,/でもOmni補完
return "\<tab>"
elseif exists('&omnifunc') && &omnifunc == ''
return a:is_shift ? "\<C-p>" : "\<C-n>"
else
return "\<C-x>\<C-o>"
endif
endfunction
inoremap <tab> <C-r>=InsertTabWrapper(0)<CR>
" Shift-Tabはうまくいかないようだ
" inoremap <S-tab> <C-r>=InsertTabWrapper(1)<CR>
" CRでOmni確定&改行
function InsertCrWrapper()
return pumvisible() ? "\<C-y>\<CR>" : "\<CR>"
endfunction
inoremap <CR> <C-r>=InsertCrWrapper()<CR>這個設定可以使用Tab鍵來進行自動完成,如果只是直接想要輸入tab,那也可以輸入shift+tab,實際用起來真是想像以上的方便。不過Tab鍵在原來的Enhanced Vim中已經先指派給Snippets了,我是把這部份設定mark起來。
伍月 11Vim 7
Vim7正式版Release了,幾個新功能之前也介紹過了,現在幾乎都還沒有什麼rpm套件可以裝,所以建議還是先抓原始碼下來自己compile,別忘了./configure時要加上--enable-multibyte才能支援非英語的編碼。
Vim 7 beta
Vim前些日子發佈了公開測試的beta版,我也正式的來看有哪些新功能,沒想到有tab和自動完成(這裡叫Omni completion),經過一天的調整後終於兩個功能都可以用了。附圖如下,另外也可以抓我的rc檔回去,需要說得只有我設定Ctrl+N是產生新tab,Ctrl+\是切換tab(本來想用[和]的,不過[的部份放在rc檔裡面還有問題,所以乾脆做成單循環)。另外自動完成是Ctrl+X後Ctrl+O。
vim
最近在學,真是好物啊,我一開始只是為了找一個免費的文字編輯軟體支援各國編碼可以讓我取代EmEditor,也剛好我有打算學Linux系統,於是我看上了vim。確定要學vim後,我就買了本歐萊禮的精通vi,還在網路上找到了大家來學VIM(一個歷久彌新的編輯器)這篇教學,加上一些範例的設定,花了一個晚上(到四點),總算讓我的vim支援多國語系編碼,更讚的是他還會自動判斷,我還沒辦法讓EmEditor能做到這件事呢,我一開始是照piaip的設定,不過還是一直有些怪問題,後來是把fileencodings裡面我不會用到的編碼都砍掉,只留下utf-8、sjis、Big5之後才正常的。
既然要用vim,總不能只是讓它自動判斷編碼而已,當然他的異能也要好好研究研究,真不愧是指令式的編輯器,有很多功能都很有趣,其中我覺得最讚的是搜尋和取代可以直接用上regular expression,而且命令的語法和perl的一樣,搜尋就直接 / ,取代就是 s// ,對我來說算是很熟悉的東西,雖然我perl不是很強,不過也寫過一段時間的perl CGI。基本的編輯功能我大概都會用了,接下來比較需要習慣的大概是選取和複製的功能吧。然後我還想弄出好看一點的color scheme,或許網路上也會有其他人弄好的吧,我應該會先找找看。

