dc dir
到
的错字通过按
c
字符上的CTRL + T组合键。
Vi / Vim中是否有类似的东西可以让我在周围交换字符和单词?
/>
#1 楼
对于字符,这非常简单:xp
将光标下的字母换成下一个字母,Xp
将光标下的字母换成前一个字母。x
命令删除光标,将光标留在下一个字符上。 X
命令删除光标之前的字符,而使光标停留在光标所在的位置。p
将(最后粘贴的)最后删除或粘贴的文本放置(粘贴)在当前光标位置之后。 (P
将其放置在当前光标位置的前面,因此xP
和XP
都将文本保留为开始之前的样子。)对于交换单词,我不确定;也许其他人可以回答。您可以接近
dawwP
(或将其重新映射为更短),但这会在几种边缘情况下中断,例如在行尾附近。评论
如果可以接受非核心解决方案,那么可以访问github.com/tommcdo/vim-exchange,它不仅可以交换单词,还可以交换整个区域vimcasts.org/episodes/…
– dkns
16年1月24日在5:07
#2 楼
拉丁语言的单词交换映射Vim Wiki上的单词交换映射不能在带有重音符号的单词上正常运行。
这些映射适用于(欧洲)ISO / IEC_8859-1 Latin-1补充字符。这是通过将
\w
的所有实例替换为[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]
并用\_W
的所有实例替换为\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]
来实现的。需要时,在每个映射的末尾添加:nohlsearch<return>
。这是最终结果:
" Use gc to swap the current CHARACTER with the next, WITHOUT changing the cursor position.
nnoremap <silent> gc xph
" Use gw to swap the current WORD with the next, WITHOUT changing the cursor position.
nnoremap <silent> gw "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)//<CR><c-o><c-l>:nohlsearch<return>
" Disable Alt+[menukey] menu keys (i.e. Alt+h for help)
set winaltkeys=no
" Use Alt + ← or Alt + h to swap the current WORD with the previous, keeping the cursor on the current word. This feels like "PUSHING" the word to the left.
nnoremap <silent> <A-Left> "_yiw?[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]\+\%#<CR>:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)//<CR><c-o><c-l>:nohlsearch<return>
nnoremap <silent> <A-h> "_yiw?[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-]\+\%#<CR>:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)//<CR><c-o><c-l>:nohlsearch<return>
" <A-h> corresponds to è
" Use Alt + → or Alt + l to swap the current WORD with the next, keeping the cursor on the current word. This feels like "PUSHING" the word to the right.
nnoremap <silent> <A-Right> "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)//<CR><c-o>/[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+<CR><c-l>:nohlsearch<return>
nnoremap <silent> <A-l> "_yiw:s/\(\%#[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\(\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)\([0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\)//<CR><c-o>/[0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+\_[^0-9A-Za-zÀ-ÖØ-öø-ÿ_\-\`]\+<CR><c-l>:nohlsearch<return>
" <A-l> corresponds to ì
" Use g{ to swap the current PARAGRAPH with the next.
nnoremap g{ {dap}p{
评论
您当然可以制作一个执行此操作的宏/绑定。 vim.wikia.com/wiki/Reverse_letters是一个例子