我最IDE和現代的文本編輯器(崇高的文本3)光標在插入新行的HTML標籤之間(又名「擴展」標籤),之後正確縮進:Vim的光標位置
之前:
<div>|</div>
按CR後:
<div>
|
</div>
但在Vim的,這就是我得到:
<div>
|</div>
如何在Vim中獲得與大多數其他編輯器一樣的行爲(請參閱上文)?
我最IDE和現代的文本編輯器(崇高的文本3)光標在插入新行的HTML標籤之間(又名「擴展」標籤),之後正確縮進:Vim的光標位置
之前:
<div>|</div>
按CR後:
<div>
|
</div>
但在Vim的,這就是我得到:
<div>
|</div>
如何在Vim中獲得與大多數其他編輯器一樣的行爲(請參閱上文)?
只有正確行爲<CR>
在插入模式下是斷開光標處的行。
你想要的是一個增強行爲,你需要添加一些東西到你的配置來得到它:一個映射,一個簡短的功能或完整的插件。
當我開始使用vim時,這種行爲實際上是我添加到我的vimrc中的第一件事情。我已經改變了很多次,在過去,但該映射已經有一段相當穩定:
inoremap <leader><CR> <CR><C-o>==<C-o>O
我用<leader><CR>
保持的<CR>
正常行爲。
這裏是一個小功能,似乎你想要做什麼:
function! Expander()
let line = getline(".")
let col = col(".")
let first = line[col-2]
let second = line[col-1]
let third = line[col]
if first ==# ">"
if second ==# "<" && third ==# "/"
return "\<CR>\<C-o>==\<C-o>O"
else
return "\<CR>"
endif
else
return "\<CR>"
endif
endfunction
inoremap <expr> <CR> Expander()
@RandyMorris和@romainl爲您的確切問題發佈了很好的解決方案。
如果您自己輸入這些標籤,您可能會感興趣的還有其他一些可能:有用於HTML/XML編輯的ragtag.vim插件。
隨着ragtag.vim鍵入此創建你的 「前」 的情況(在插入模式):
div<C-X><Space>
要創建自己的情況 「後」,而是鍵入:
div<C-X><Enter>
因此,如果您事先知道您要「展開」標籤,只需鍵入元素名稱和組合號碼即可CtrlX後面跟着輸入就夠了。
還有其他更高級的插件可以在編輯HTML時保存按鍵,例如ZenCoding.vim和Sparkup。
謝謝!不幸的是,這並不適用於我,雖然我已經安裝了ragtag插件,並使用它插入ruby標籤(所以我知道它的工作原理)。 –
這個小片段將重新映射在插入模式輸入測試光標是否爲>
和<
之間並據此採取相應行動。根據您的縮進設置,\<Tab>
可能需要刪除。
它將不與可能也可以映射輸入鍵,要知道,有可能是更多的工作,如果你想的兼容性做其他插件發揮好。
function EnterOrIndentTag()
let line = getline(".")
let col = getpos(".")[2]
let before = line[col-2]
let after = line[col-1]
if before == ">" && after == "<"
return "\<Enter>\<C-o>O\<Tab>"
endif
return "\<Enter>"
endfunction
inoremap <expr> <Enter> EnterOrIndentTag()
我只測試了簡單的情況下(該行的開頭,該行的結束,內和外><
),有可能是邊緣情況,這將不會趕上。
謝謝蘭迪。您的解決方案非常好,但實際上我需要一些與matchIt等其他插件配合使用的內容。你的代碼讓我想到編寫這樣一個函數,謝謝! –
由於沒有人提到它,我會的。有優秀的插件,不正是 delemitmate
試試這個:https://github.com/othree/xml.vim – Kent
我無法在這裏回答這個問題,因爲某些原因(不斷收到錯誤提交一個時) 。我在[這個要點](https://gist.github.com/rson/7bd877744ac59bee5491)上粘貼了我的可能答案。 –
@RandyMorris我沒有問題發佈它作爲答案。嘗試再次發佈? – FDinoff