我有以下代码:
if some_cond && another
foo_bar
end
我希望将其更改为:
foo_bar if some_cond && another
正确的做法是什么?
答案 0 :(得分:5)
我会使用以下正常模式命令序列
ddjVpkJ<<
或这个Ex命令链 1 :
:m+|-j|<|+d
这里我假设在重构之前光标位于if
- 行
(不一定在该行的开头)。
1 首先,if
- 行被:move +
向下移动一行
命令。 :move
命令切割给定范围的行(即
当前行(如果未指定)并将其粘贴到由该地址所寻址的行下方
只有这个命令的参数。 +
地址是.+1
的快捷方式
引用下一行的符号(见:help {address}
)。第二,行
这是条件语句的主体加入刚刚移动
if
- 线。 :join
命令将给定范围的行连接成一行
线。 -
范围是-1
地址的缩写形式,指的是:help :range
光标上方的行(参见shiftwidth
)。第三,新加入的线是
使用:<
命令向左移动了一个end
。最后,剩下的
+
- 地址被删除,其地址称为:delete
范围
通过{{1}}命令。
答案 1 :(得分:2)
我看到很少(可能是非最佳的)解决方案:
光标位于第一行的第一个字符中:
if
条件,但将光标留在同一位置(不要删除行)if
条件将游标放在第一行的第一个字符中,如前所述:
if
条件另一种解决方案:
这可能不是最佳选择,但是我不假思索地这样做,因为大部分命令都在我的肌肉记忆中(你不会想到如何在你周围移动,如何在大部分时间内猛拉/删除和粘贴,以及加入线也有助于记住)。
如果您在配置中启用virtualedit
,而不是 A&lt; Space&gt; &lt; Esc&gt; 你可以 $&lt; Space&gt; ,但我发现 $ 比 A 更接近 Ctrl - [(它与ESC相似)。
作为建议:如果你使用一些大写字母命令,如果可能的话尝试链接它们,所以你只需按住Shift然后执行一些命令,而不是混合上下字母命令并按下两个键一次(上面的字母是2键按下,一个是Shift)。一旦我发现组合有助于在控制台Ctrl + cpj中重新启动服务器,它会按Ctrl + c,Ctrl + p(上一个命令)和Ctrl + j(Enter键)按住Ctrl键。从那时起,我尝试在Vim中找到类似于节省时间的组合,主要是使用Shift,因为在Vim中没有使用Ctrl。
答案 2 :(得分:2)
另一种方式:
ddpkJjdd
答案 3 :(得分:1)
可能有30种方法可以做到这一点。
这是一个,假设您从正常模式中的单词end
的末尾开始:
d d (删除最后一行)
“ a D (删除并复制foo_bar
到缓冲区a
)
d d (现在删除 - 空行2)
“ a P (在插入符号之前从缓冲区a
粘贴)
a 空格 Esc (插入空格并返回正常模式)
同样,“正确”很少适用于Vim,因为有很多方法可以完成某些事情。这是一个很小的变化,即使重新输入foo_bar
也是合理的。