经常,例如,当我编写 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,非常强大和有用!