簡體   English   中英

在vim中使用不完整的映射顯示結果而不是X

[英]Show result instead of X with incomplete mapping in vim

~/.vim/ftplugin/tex/insert.vim文件中,我具有以下映射

; <Nul> is ctrl-space
imap <Nul> \,
imap <Nul><Nul> ~
imap <Nul><Nul><Nul> \enspace
imap <Nul><Nul><Nul><Nul> \quad
imap <Nul><Nul><Nul><Nul><Nul> \qquad

這使我可以通過按ctrl-space插入不同寬度的空間,每按一次都會使空白變長。 當我輸入第一個ctrl-space時,我得到一個X ,它等待着我查看是否要輸入更多ctrl-space或是否完成。

我想知道是否有辦法顯示空間,將其直接輸入到緩沖區並在再次按下時進行更改,或者將其放入狀態欄中直到完成。

我認為有可能的一種方式是檢查光標之前的字符是否為\\,是否將它們替換為下一個空格,如果不是,則檢查其余我可以輸入的空格,最后輸入一個\\,如果沒有空格。 我只是不知道如何完成這樣的鍵盤映射。

您當前的地圖解決方案基於映射超時。 在此之前,Vim等待更多的輸入,但尚未插入任何內容。 為了以后修改插入的內容,您需要完全替換該方法。

可以使用:map <expr> <Nul>來實現,檢查光標之前的內容,然后返回<BS>字符以擦除該字符,然后替換文本。

使用mjbrownie / swapit插件,您將免費獲得“切換替代”功能(使用<Ca> / <Cx> ):只需將以下內容放入~/.vim/ftplugin/tex/swapit.vim

SwapList spaces \, ~ \enspace \quad \qqad

您可以保留原始的<Nul>映射,以便在知道所需內容時(或用於初始插入)快速插入,並僅在以后使用swapit進行修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM