例如,如果我有一些代码:
foo = bar("abc", "def", true, callback);
是否有一个很好的命令可以将真实移动到第一或第二位置,使逗号保持不变?
作为奖励,我的朋友想知道这是否也适用于Emacs。
答案 0 :(得分:19)
在Vim中,如果您将光标放在第一个单词的开头并执行dWWP
,那么它将具有所需的效果。这是一个细分:
dW delete the current word, including the comma and the following whitespace
W move to the start of the next word
P insert the deleted text before the cursor
如果在要交换的对之后还有其他参数,这将有效 - 如果只有两个参数或者您想要交换最后两个参数,则需要修改它,因为它将在结束括号后粘贴文本
或者你可以使用正则表达式替换:
:%s/(\([^,]\+\),\s*\([^,)]\+\)/(\2, \1/
这将在open括号后找到前两个参数并交换它们。
<强>更新强>:
搜索vim.org时发现了swap parameters插件,该插件可以完全按照您的意愿执行,并且可以处理上述任何一种方法都无法解决的情况。
答案 1 :(得分:18)
我不知道vi的答案,但在Emacs中,transpose-sexps
( C-M-t )将交换光标两侧的两个参数。实际上transpose-words
( M-t )是我的第一个猜测,但这留下了引号。
答案 2 :(得分:1)
您需要转置emacs命令。但它仅限于不猜测它在列表中的转置,它只考虑文本(它不能猜测列表的第1个,第2个字)。试试这个。
将光标放在逗号为true之后。使用M-x transpose-words
。默认情况下,它将从该点转换下一个单词。快捷方式是M-t
。
您可以使用C-u 2 M-t
进行转置,然后使用下一个单词。
现在回答你的问题。如果您想将true,
向后移动1个单词,请使用C-u -1 M-t
,向后移动2个单词C-u -2 M-t
。
我不是VIM的人。对不起那就好了。
答案 3 :(得分:0)
如果您想将此作为重构而不仅仅是文本操作,我建议查看Xrefactory,这是Emacsen的重构工具(C / Java免费,C ++商业版)。
答案 4 :(得分:0)
转置上一个(Ctrl-t p)和下一个(Ctrl-t n)参数...添加 跟随你的.vimrc文件:
map <C-t>p ?,\\|(<CR>wd/,\\|)<CR>?,\\|(<CR>"_dw?,\\|(<CR>a, <C-c>?,<CR>P/,<CR>w
map <C-t>n ?,\\|(<CR>wv/,<CR>d"_dw/\\,\\|)<CR>i, <C-r>"<C-c>?,<CR>?,\\|(<CR>w