簡體   English   中英

為什么 vimrc 映射宏中的“dO----------”會拋出錯誤“E488:尾隨字符”?

[英]Why does "dO----------" in a vimrc mapped macro throw the error "E488: Trailing characters"?

在我的 vimrc 中,我有一個折疊標記、一個 function 和一個映射宏:

set foldmarker=----------,++++++++++++

"Function to switch INTO visual line mode, not just toggle
function SwitchToVisLine()
    if visualmode()!="V"
        execute "normal! V"
    endif
endfunction

"Macro to wrap and fold visually highlighted lines
xnoremap <F3> :call SwitchToVisLine()
              \dO
              \----------<CR>
              \++++++++++<ESC>
              \k0pzako

關鍵是能夠從三種視覺模式中的任何一種中選擇 go 並點擊<F3>以將活動線包裹在折疊標記中,折疊,並且 cursor 在整個混亂上方的新行上返回。

問題:使用所寫的宏時,出現錯誤E488: Trailing characters: dO----------

令人困惑的是,當我手動遍歷每個擊鍵時,甚至調用 function 從視覺或視覺塊模式切換到視覺線模式時,我都沒有收到此錯誤。 僅當我將其作為映射宏運行時才會發生。

任何幫助深表感謝!

在當前的形式中,您嘗試制作多行宏在 Vim 中看起來像這樣,並刪除了行繼續字符:

:call SwitchToVisLine()dO----------<CR>++++++++++<ESC>k0pzako
                      /\
                     <CR>

這是不正確的,因為:call SwitchToVisLine()之后缺少<CR>

它應該如下所示:

xnoremap <F3> :call SwitchToVisLine()<CR>
              \dO
              \----------<CR>
              \++++++++++<ESC>
              \k0pzako

也就是說,這里有很多改進機會。

  • 宏可以替換為兩個:help:silent :help:put命令:

     xnoremap <F3>:sil'<put!='----------'\|sil'>put='++++++++++'<CR>

    哪個:

    • 使您的自定義 function 變得不必要,因為不再需要強制視覺線模式,
    • 不污染任何寄存器,
    • 沒有破壞性。
  • 您可以使用foldmarker的值而不是重復自己:

     xnoremap <F3>:sil'<put,=&fmr->split(',')[0]\|sil'>put=&fmr->split(',')[1]<CR>

十對一,不錯。

暫無
暫無

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

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