2011-12-22 32 views
1

這是,如何在Vim上使用autoclose插件時自動關閉匹配的引號?

我使用這個autoclose插件,因爲我想在vim上自動關閉功能。

當編輯HTML時使用Omnicompletion,這就是我得到的。

<p id="

注意初始報價...

輸入一些數據後,我proceded關閉引號,這是輸出

<p id="sometext""

我意識到我可以用ToggleAutoCloseMappings切換插件。 我還想過刪除現有的引號並用autoclose插件打開一些引號。

一個更優雅的解決方案是關閉現有的引號而不切換插件(它不必自動關閉)。

回答

-1

該插件只識別已明確輸入的引號。當您從自動完成(或註冊粘貼)引入報價時,不會識別該報價,因此會導致重複報價。

我想你可以做的事情很少,除非在插件處於活動狀態時避免插入這些不完整的引用片段。

1

我建議兩種解決方案之一:

  1. 最簡單的一個:立即完成後,將報價時使用<C-v>"
  2. 使用<expr>映射,您嘗試檢查情況並僅在需要時運行該插件。

    " Put to ~/.vim/after/plugin/autoclose.vim 
    let g:old_quote_rhs=substitute(maparg('"', 'i'), '<[^>]*>', '\=eval(''"\''.submatch(0).''"'')', 'g') 
    inoremap <expr> " (HasUnclosedQuote() ? '"' : g:old_quote_rhs) 
    

    最棘手的部分是編寫函數HasUnclosedQuote的權利。下面是一個簡單的實現在同一行沒有結束的報價僅工作:

    function HasUnclosedQuote() 
        return getline('.')[:(col('.')-1)]!~#'\v^%([^"]+|\"%(\\.|[^"\\]+)*\")*$' 
    endfunction 
    
相關問題