是否有可能改进在命令行上重复命令的vim映射?

时间:2015-05-05 12:52:52

标签: vim

所以这是我的映射:

nnoremap <cr> :nnoremap <lt>cr> :w!<lt>cr>:!tmux send-keys -t :1.1 "py.test --cov=." C-m <lt>cr><lt>cr><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left><left>

非常棒。它的作用是当我第一次启动我的vim会话时(或者在重新加载vimrc之后),然后点击回车,我可以立即输入我所在的tmux会话的名称并再次按回车键。假设我在窗口1的第0个窗格中编辑我的文件,并且我有一个tmux分割(水平,在我的典型情况下)。在正常模式下进入后续时间将保存我的活动文件并在另一个窗口中启动我的py.test测试。这意味着我可以在测试完成之前在技术上继续编码。我忘记了我第一个得到这个想法的人,但是那个家伙。

无论如何,您毫无疑问地注意到该地图中有<left> 很多,因为我想开始命令输出能够设置会话名称。但也可能出现我在不同窗口或其他地方编辑代码的情况,或者我需要更改我的pytest命令或其他内容,所以我仍然希望能够进行这些修改。

有没有办法可以改善这种映射?也许是以完全不同的方式接近它?

1 个答案:

答案 0 :(得分:1)

您的初始映射构建另一个映射命令,并使用<Left>将光标插入到正确的位置以完成然后执行它。

另一种方法是定义一个自定义命令(例如:TestInSession),它将变量部分作为参数。然后,您的初始映射可以构建另一个映射,将光标留在:TestInSession的末尾,您可以在命令行中减少混乱,并在最后更容易编辑。

如果您需要重新配置其他映射的功能,您可以定义一个未被覆盖的替代初始映射,例如:

:nnoremap <Leader><cr> :nnoremap <lt>cr> ...