可以改进在命令行上重复命令的vim映射吗?

可以改进在命令行上重复命令的vim映射吗?,vim,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>

下面是我的映射:

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>
nnoremap:nnoremap cr>:w!cr>:!tmux发送键-t:1.1“py.test--cov=.“C-m cr>cr>
太棒了。它的作用是当我第一次启动我的vim会话(或者在重新加载vimrc之后)并点击enter时,我可以立即键入我所在的tmux会话的名称,然后再次点击enter。假设我正在窗口1的第0个窗格中编辑文件,并且我有一个tmux分割(在我的典型情况下是水平的)。随后在正常模式下按enter键将保存活动文件并在另一个窗口中启动py.test测试。这意味着我可以在测试通过之前继续编写代码。我忘了我第一次从谁那里得到这个主意了,但我忘记了那个家伙

无论如何,您肯定已经注意到,在该映射中有很多
,因为我希望启动命令以设置会话名称。但也可能有这样的情况,我在不同的窗口或其他地方编辑代码,或者我需要更改pytest命令或其他东西,所以我仍然希望能够进行这些修改


有什么方法可以改进这个映射吗?可能以完全不同的方式接近它?

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

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

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

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