如何映射一个键来执行程序,并在GVim中显示其输出?

如何映射一个键来执行程序,并在GVim中显示其输出?,vim,Vim,在我的.gvimrc中,我有以下行: map <f4> :!./%< map:!./% 在源文件上,我必须按F4键,然后按enter键,但它工作正常,显示输出,并挂起,直到我再次按enter键 如果我将其更改为: map <f4> :!./%< <CR> map:!./% 它的行为是显示输出,但不会等到我按enter键(因此输出变得无法读取) 是否有任何方法可以显示程序的输出,并挂起直到我按enter键,而不必在命令发出之前按enter

在我的.gvimrc中,我有以下行:

map <f4> :!./%<  
map:!./%
在源文件上,我必须按F4键,然后按enter键,但它工作正常,显示输出,并挂起,直到我再次按enter键

如果我将其更改为:

map <f4> :!./%< <CR>
map:!./%
它的行为是显示输出,但不会等到我按enter键(因此输出变得无法读取)


是否有任何方法可以显示程序的输出,并挂起直到我按enter键,而不必在命令发出之前按enter键,也不必打开单独的窗口?

请参见
:help redir
。您可以将该输出重定向到寄存器并将其转储到缓冲区

为了让您了解它是如何工作的,我在vimrc中有这个用于查看
:g/
的结果

"" Puts the last g search command in a new buffer -- clobbers your c buffer
cabbrev what :redir @c<CR>:g//<CR>:redir END<CR>:new<CR>:put! c<CR><CR>
“”将最后一个g search命令放入一个新的缓冲区--关闭您的c缓冲区
cabbrev what:redir@c:g/:redir END:new:put!C

请参见
:帮助重拨
。您可以将该输出重定向到寄存器并将其转储到缓冲区

为了让您了解它是如何工作的,我在vimrc中有这个用于查看
:g/
的结果

"" Puts the last g search command in a new buffer -- clobbers your c buffer
cabbrev what :redir @c<CR>:g//<CR>:redir END<CR>:new<CR>:put! c<CR><CR>
“”将最后一个g search命令放入一个新的缓冲区--关闭您的c缓冲区
cabbrev what:redir@c:g/:redir END:new:put!C

您的第二个映射应该正常工作。有时,此问题是由于映射末尾有额外的空间造成的。

您的第二个映射应该正常工作。有时,此问题是由于映射末尾有额外的空间造成的。

您的第二个映射应该正常工作。不过,一个有用的替代方法是安装Dr Chip的插件。这可以用于垂直拆分窗口,其中一个窗格中包含您正在编辑的脚本,另一个窗格中包含脚本的输出。每次点击已映射的键时,脚本的输出都会添加到输出窗格中


对于调试脚本非常有用。

您的第二个映射应该可以正常工作。不过,一个有用的替代方法是安装Dr Chip的插件。这可以用于垂直拆分窗口,其中一个窗格中包含您正在编辑的脚本,另一个窗格中包含脚本的输出。每次点击已映射的键时,脚本的输出都会添加到输出窗格中


对调试脚本非常有用。

我尝试了您的命令,gViM等待我按Enter键,以便读取输出。gViM的版本是什么?您也可以检查
:map
以查看是否没有冲突的映射。@Pikrass最好不要检查
:map
以查看冲突的映射,而是在所有情况下都使用
*noremap
,除非您绝对确定要使用
*map
。Fixman请发布
:set
的输出(无参数)如果将
map
更改为
noremap
不起作用。可能有一些选项会抑制«点击回车»提示。您的第二个映射应该正常工作。有时这个问题是由于在映射的末尾有一个额外的空间造成的。@php太多了:哇,你说得对,我现在觉得自己很愚蠢。请将其作为答案发布,以便我可以接受。我尝试了您的命令,gViM等待我按Enter键,以便我可以读取输出。gViM的版本是什么?您也可以检查
:map
以查看是否没有冲突的映射。@Pikrass最好不要检查
:map
以查看冲突的映射,而是在所有情况下都使用
*noremap
,除非您绝对确定要使用
*map
。Fixman请发布
:set
的输出(无参数)如果将
map
更改为
noremap
不起作用。可能有一些选项会抑制«点击回车»提示。您的第二个映射应该正常工作。有时这个问题是由于在映射的末尾有一个额外的空间造成的。@php太多了:哇,你说得对,我现在觉得自己很愚蠢。请把它作为一个答案发布,这样我就可以接受它了;新的位置是链路失效;新地点是