2010-01-26 142 views
4

我發現了一些線程,但他們是3歲。有沒有人有一個插件推薦VIM,當我鍵入{ 它會做:Vim插件幫助:自動插入結合中間光標的遊標

{ 
::cursor here:: 
} 

另一個有用的東西是,如果我鍵入if它會做:

if(::cursor here::) 

感謝

+0

我好奇該插件(優選通用)。現在我曾經輸入'{} <^O> O'得到相同的效果 – MBO

+0

這與Bash有什麼關係? –

回答

2

檢出snipMate插件。這是非常可定製的。有一個很好的screen-cast顯示插件的行動。

例如在C中使用snipMate插件。

if<Tab> 

would produce: 

if (::cursor:1::) { 
    ::cursor:2:: 
} 

首先<標籤>將光標停留在::光標:1 ::和第二<標籤>會帶你到::光標:2 ::。

snipMate中應該有一些與bash腳本相似的東西,如果不是這樣,添加一個非常簡單。

+0

非常有用..似乎有一些問題,但設置{像上面的觸發器(不需要聲明或類似的東西)你有沒有這樣做的運氣,或者你只是去提供的片段? – stormist

+0

我通常使用默認的。但我確實嘗試爲「{」添加片段,它確實有效。我將這個片段http://vim.pastey.net/132128添加到〜/ .vim/snippets/sh.snippets(Shell腳本代碼片段)中。 – shoban

1

我用下面的代碼(PHP模板):

function! EatChar() 
    let l:char=getchar(0) 
    return '' 
endfunction 

inoreabbrev function_ function <ESC>maa()<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev if_ if (<ESC>maa)<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev ifelse_ if (<ESC>maa)<CR>{<CR><CR>}<CR>else<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev for_ for (<ESC>maa; ;)<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev foreach_ foreach (<ESC>maa as $key=>$value)<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev while_ while (<ESC>maa)<CR>{<CR><CR>}<ESC>`aa<C-O>:call EatChar()<CR> 
inoreabbrev <? <?php <ESC>maa ?><ESC>`aa<C-O>:call EatChar()<CR> 
1

This article顯示了一個簡單的解決方案,並鏈接到更強大的一些。

下面是從頁解決方案的一部分:

inoremap {  {}<Left> 
inoremap {<CR> {<CR>}<Esc>O 
inoremap {{  { 
inoremap {}  {} 
1

有很多插件和ftplugins,沒有工作。大多數時候,新手插件並沒有更好,因爲他們經常重新發明輪子而不考慮奇怪的情況。

在「舊」的東西,我有:

(*)映射/縮寫的膨脹防止了評論/串上下文中,提供了控制語句作爲C周圍幾個形式,並且也支持幾個文體選項(在C的情況下控制語句;它們很容易轉置爲其他語言)

3

我使用delimiteMate.vim。它以可配置和非煩人的方式處理這個問題。

0

如果你不需要各種文本片段插件的功能(或者只是不想弄清楚如何配置它以滿足你的需求),並且只有少數(一兩個)簡單模板,你可以只需記錄其創建並將其映射到快捷方式即可。

例如,

:nmap <leader>b o{<cr>}<esc>O