在Vim中切换逗号分隔列表顺序的最快方法

在Vim中切换逗号分隔列表顺序的最快方法,vim,Vim,Supose我有一个函数,比如 myfunc(arg1 = whatever, arg2 = different) 我想把它转换成 myfunc(arg2 = different, arg1 = whatever) 实现这一点的最快命令序列是什么?假设光标位于第一个“m”上。我的最佳尝试是fadt,lpldt)%p我建议您稍微更改它,以便它可以从光标所在的位置工作,并且可以在任何参数上工作: 0f(ldt,lpldt)%p 我对您的方法所做的更改是添加了0以将光标移动到开头,并将fa更改为

Supose我有一个函数,比如

myfunc(arg1 = whatever, arg2 = different)
我想把它转换成

myfunc(arg2 = different, arg1 = whatever)

实现这一点的最快命令序列是什么?假设光标位于第一个“m”上。我的最佳尝试是
fadt,lpldt)%p

我建议您稍微更改它,以便它可以从光标所在的位置工作,并且可以在任何参数上工作:

0f(ldt,lpldt)%p
我对您的方法所做的更改是添加了
0
以将光标移动到开头,并将
fa
更改为
f(l
,这样无论参数名称如何,它都可以工作

现在,您可以将其放入宏中,或者,如果您经常使用它,可以将其作为映射:

nnoremap <C-k> 0f(ldt,lpldt)%p
nnoremap 0f(ldt,lpldt)%p
我在这里随意选择了Ctrl-k,你可以使用任何你喜欢的东西。

有一个vim插件:

  • 目视选择
    arg1=任何内容
  • 按Shiftx键
  • 目视选择
    arg2=不同
  • 按Shiftx键

我编写了一个用于操作函数参数的插件,名为。使用它,您只需执行
>,
,光标所在的参数将向右移动。它还提供了参数文本对象,形式为
I,
a,
,使用纯vim,光标位于行的开头:

%3dB%pldt,lp
这是我能想到的现场最快的(12杆)。 这应该适用于所有名称,只要等号周围始终有一个空格

%     " Jump to closing brace
3dB   " Delete to the beginning of 3 WORDS, backwards
%     " Jump to the beginning brace
p     " Paste the deleted text from the default register
l     " Move right one character
dt,   " Delete until the next comma
l     " Move right one character
p     " paste the deleted text from the default register

您也可以将其转换为宏,以便随时使用。

我认为您的尝试相当不错。我想不出更好的方法。