如何映射一个键来执行程序,并在GVim中显示其输出?
在我的.gvimrc中,我有以下行:如何映射一个键来执行程序,并在GVim中显示其输出?,vim,Vim,在我的.gvimrc中,我有以下行: map <f4> :!./%< map:!./% 在源文件上,我必须按F4键,然后按enter键,但它工作正常,显示输出,并挂起,直到我再次按enter键 如果我将其更改为: map <f4> :!./%< <CR> map:!./% 它的行为是显示输出,但不会等到我按enter键(因此输出变得无法读取) 是否有任何方法可以显示程序的输出,并挂起直到我按enter键,而不必在命令发出之前按enter
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太多了:哇,你说得对,我现在觉得自己很愚蠢。请把它作为一个答案发布,这样我就可以接受它了;新的位置是链路失效;新地点是