我知道我可以在vim中键入
:terminal <command> %
在当前编辑缓冲区中的文件上运行命令。例如,为了简化我想做的事情,让我们使用一个简单的ls命令:
:terminal ls %
将拆分窗口,运行命令并退出外壳,同时将输出保留在屏幕上。那不是我想要的不是。我希望它运行命令,但把我留在外壳中,这样我可以运行更多可能与当前文件/操作相关的bash命令,然后在完成后手动退出。
如果我只是键入
:terminal
它把我带到了一个bash shell中,它使我可以键入任意数量的命令,这很棒。但是我将失去使用%的扩展工具的能力,并且无法从正在编辑的文件中生成终端。即。我失去了从原始文件/缓冲区生成的上下文的自动化,这意味着我必须手动键入当前文件名(包括可能的长路径),或滚动以前的bash历史记录以重新运行原始命令。这是按键的浪费。
基本上,我试图找到一种创建vim映射的方法,该方法可以让我通过:term
在bash命令中使用%文件名扩展,而不必在命令运行后结束作业(我更喜欢留在在shell提示下继续会话!)
我实际上不在乎解决方案是否只是启动:term
shell并在bash提示符下以%filename扩展名回显我的命令而无需输入它..这将允许我在命令后仍然停留在bash中由我执行,并带有手动回车符。
我不确定我想做的事是否可行?请注意,我不希望暂停当前的编辑会话并返回fg,因为它占用了当前的编辑会话。我不确定tmux-vim集成是否可以提供一种实现我想要的方式的方法,尽管我更愿意使用直:term
来找到解决方案,因为它是内置功能,除了我可以使用之外,效果很好正在努力实现:)
答案 0 :(得分:0)
此映射可用于扩展“%”并使新终端保持活动状态:
:nmap <F12> :let $MYFILE=expand('%')<CR>:terminal<CR>echo $MYFILE<CR>
您可能需要映射到其他键,否则应该可以。
答案 1 :(得分:0)
您可以使用命令“ put”将变量放在光标之后。例如:
let filename=expand(%)
term
put='ls '.filename
答案 2 :(得分:0)
试试这个:
:terminal ls % && bash