以逗号分隔的列表交换项目

时间:2013-02-06 10:49:59

标签: vim

经常,例如当我编写Latex代码时,我遇到了重新排列用逗号分隔的列表项的任务。如果两个项目都不在列表的开头或结尾,则会很快完成此操作。但如果他们处于边缘,就必须特别注意分离逗号。

作为一个例子考虑

\cite{GirR84, Tar00, Tem77}.

在vim中是否有一种聪明的方法可以将最后一项放在前面或中间位置?

4 个答案:

答案 0 :(得分:10)

我实际上制作了一个插件来处理类似argumentative.vim的情况。 (对不起插头。)

Argumentative.vim提供以下映射:

  • [,],动作将转到上一个或下一个参数
  • <,>,向左或向右移动参数
  • i,a,参数文本对象。例如da,ci,yi,

因此,使用此插件,您可以移至相关参数,然后根据需要多次执行<,>,。它也可以计算,例如2>,

如果Tim Pope的优秀repeat.vim插件安装<,>,可以通过.命令重复使用。

答案 1 :(得分:4)

我在.vimrc中有以下映射,我想我是从this tip on 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更改为右侧。

答案 2 :(得分:3)

您可以尝试使用vim插件vim-swap,非常强大且实用!

答案 3 :(得分:1)

Vim Tips Wiki交换任意内容的另一种有趣方式:

:vnoremap <C-X> <Esc>`.``gvP``P