在 Vim 中如何映射快捷键执行 shell 命令

5

我使用 vimshell 在vim内执行命令。

nnoremap <leader>vs :VimShellPop<CR>

通过这个按键映射,我可以打开vim shell并执行像'bundle install'这样的命令,然后输入exit退出VimShellPop窗口,但我想设置一个按键映射。

nnoremap <leader>bi :

要打开vimshellpop,请执行bundle install命令并在完成后退出。在vimshell中是否可能实现此操作?

1
我不知道插件使用的技巧,但是像 nnoremap <leader>bi :VimShellPop<CR>bundle install<CR> 这样简单的附加是否有效呢?! - Ingo Karkat
@IngoKarkat:你提到的键映射将打开vimshellpop窗口并附加bundle install命令,但你必须按回车键执行bundle install并在完成后手动输入exit。 - Rajanand02
尝试使用 nmap <leader>bi :VimShellPop<CR>bundle install<CR>exit<CR> - Ingo Karkat
尝试过了,它只是将“exit”附加到“bundle install”命令中... 只有在我按下回车键后,“bundle install”命令才开始执行...<CR>似乎不起作用... - Rajanand02
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/44072/discussion-between-rajanand02-and-ingo-karkat - Rajanand02
显示剩余3条评论
2个回答

5

vimshell插件提供了一个Vim缓冲区内的交互式Shell。显然,您不需要这种交互性(因为您打算在发出Shell命令后立即退出)。对于此目的,您不需要插件本身;内置的:!命令已经允许您启动外部命令:

:nnoremap <leader>bi :!bundle install<CR>

如果您想保持输出的可见性,可以将其读入临时缓冲区:

:nnoremap <leader>bi :new<Bar>0r!bundle install<CR>

这个键映射会让我退出vim,但在我按下回车后又回到了vim。我想在执行<leader>bi命令后继续编辑我的代码,同时也想查看命令的结果。如果是vimshellpop,我可以在代码上方弹出窗口中查看结果。这就是为什么我更喜欢使用vimshell而不是在vim内部使用原生shell命令(!)。 - Rajanand02
啊,我明白了,你的问题缺少那一部分。我在 Vim 中添加了一个带有临时缓冲区的替代映射。 - Ingo Karkat

1

在Vim中拥有交互式shell是Vim明确的非目标之一(参见:help design-not),因此插件必须经过几个步骤才能实现这一点。这些hack导致了这些问题(例如,在问题的评论中尝试定义适当映射);缺乏自动化(例如通过映射)是这种方法的局限性。

您可以通过电子邮件或GitHub问题联系vimshell的作者;他通常非常开放和响应!他处于最佳位置,可以使这样的映射工作。


好的,我会尝试给发送邮件或在GitHub上创建一个问题... - Rajanand02

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接