簡體   English   中英

Vim,用重音符號交換單詞

[英]Vim, swapping words with accented characters

我正在嘗試使用以下映射在Vim中交換單詞:

" Swap current word with previous one (push word to the left)
nnoremap <silent> <A-h> "_yiw?\k\+\_W\+\%#<CR>:s/\(\%#\k\+\)\(\_W\+\)\(\k\+\)/\3\2\1/<CR><c-o><cl>:noh<CR>

" Swap current word with the next one (push word to the right)
nnoremap <silent> <A-l> "_yiw:s/\(\%#\k\+\)\(\_W\+\)\(\k\+\)/\3\2\1/<CR><c-o>/\k\+\_W\+<CR><c-l>:noh<CR>

我的vimrc文件中還包含以下內容

set isk=@,48-57,_,192-255,:,#

上面的映射可以很好地用於交換(推送單詞),除非帶有重音符號的單詞開頭。 由於我經常用西班牙語寫帶重音符號的字符,因此如何更改正則表達式來解決此問題?

問題在於\\_W “匹配非\\_W和換行符”原子。 在Vim中,單詞僅限於ASCII字符,因此您的重音字符在此處匹配並創建錯誤的邊界。 相反,您需要“非關鍵字和換行符”。 由於\\K 不是 \\k的否定,我們必須使用\\%(\\k\\@!\\_.\\) “不是關鍵字的任何字符(和換行符)”。 這些是結果映射:

nnoremap <silent> <A-h> "_yiw?\k\+\%(\k\@!\_.\)\+\%#<CR>:s/\(\%#\k\+\)\(\%(\k\@!\_.\)\+\)\(\k\+\)/\3\2\1/<CR><c-o><c-l>:noh<CR>

nnoremap <silent> <A-l> "_yiw:s/\(\%#\k\+\)\(\%(\k\@!\_.\)\+\)\(\k\+\)/\3\2\1/<CR><c-o>/\k\+\%(\k\@!\_.\)\+<CR><c-l>:noh<CR>

我通常更喜歡一個宏,可以說我們有如下一行(是的,我只是用它來解釋,這沒有任何意義):

實驗性的

現在在vim中,我將轉到此行的開頭,然后按q,然后按一個記錄鍵(任何字母數字鍵),讓我們說“ l”。 然后記錄我的動作:

  1. 按'dW'剪切單詞(大寫w並假設單詞以空格結尾)

  2. 繼續以e結尾

  3. 按“ a”添加空格

  4. 按 ''

  5. 輸入“ p”進行粘貼。

我第一次知道它太麻煩了,但是一旦將其保存起來,您就可以用“ @l”對任何單詞進行調用,“ l”是我們上面的記錄鍵。

暫無
暫無

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

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