经常,例如,当我编写 Latex 代码时,我遇到了重新排列列表中以逗号分隔的项目的任务。如果两个项目都不在列表的开头或结尾,则可以快速完成此操作。但如果它们处于边缘,则必须特别注意分隔逗号。
作为一个例子考虑
\cite{GirR84, Tar00, Tem77}.
vim 中是否有一种聪明的方法可以将例如最后一项放在前面或中间位置?
经常,例如,当我编写 Latex 代码时,我遇到了重新排列列表中以逗号分隔的项目的任务。如果两个项目都不在列表的开头或结尾,则可以快速完成此操作。但如果它们处于边缘,则必须特别注意分隔逗号。
作为一个例子考虑
\cite{GirR84, Tar00, Tem77}.
vim 中是否有一种聪明的方法可以将例如最后一项放在前面或中间位置?
我实际上制作了一个插件来处理类似的情况,称为argumentative.vim。(对不起插头。)
Argumentative.vim 提供以下映射:
[,以及],将转到上一个或下一个参数的动议<,并将>,论点左移或右移i,和a,参数文本对象。例如da,,ci,或yi,因此,使用此插件,您可以移动到有问题的论点,然后根据需要执行一次<,或>,多次。它也可以计数,例如2>,。
如果您安装了 Tim Pope 出色的repeat.vim插件<,,并且>,可以使用该.命令进行重复。
我有以下映射.vimrc,我想我从wikia 上的这个提示中得到了它们:
nnoremap <silent> gl "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><c-o>/\w\+\_W\+<CR><c-l>
nnoremap <silent> gh "_yiw?\w\+\_W\+\%#<CR>:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><c-o><c-l>
gh将光标下的单词向左和gl向右交换。
从Vim Tips Wiki交换任意事物的另一种有趣方式:
:vnoremap <C-X> <Esc>`.``gvP``P
你可以试试 vim 插件vim-swap,非常强大和有用!