如何执行我在Vi(m)中编辑的文件并在分割窗口中输出(如在SciTE中)?
当然我可以这样执行:
:!scriptname
但是,是否可以避免编写脚本名称以及如何在分割窗口中获取输出而不是屏幕底部?
有make
命令.它运行makeprg
选项中的命令集.使用%
作为当前文件名的占位符.例如,如果您正在编辑python脚本:
:set makeprg=python\ %
是的,你需要逃离这个空间.在此之后你可以简单地运行:
:make
如果您愿意,可以设置autowrite
选项,它会在运行之前自动保存makeprg
:
:set autowrite
这解决了执行部分.不知道如何将该输出转换为不涉及重定向到文件的拆分窗口.
要访问当前缓冲区的文件名,请使用%
.要将它变为变量,您可以使用该expand()
函数.要使用新缓冲区打开新窗口,请使用:new
或:vnew
.要将命令的输出传递到当前缓冲区,请使用:.!
.把它们放在一起:
:let f=expand("%")|vnew|execute '.!ruby "' . f . '"'
显然用ruby
你想要的任何命令替换.我用过,execute
所以我可以用引号括起文件名,所以如果文件名中有空格,它就会起作用.
Vim有!
("bang")命令直接从VIM窗口执行shell命令.此外,它允许启动与管道连接并读取标准输出的命令序列.
例如:
! node %
相当于打开命令提示符窗口和启动命令:
cd my_current_directory node my_current_file
有关详细信息,请参阅"Vim提示:使用外部命令".
我的vimrc中有一个快捷方式:
nmap:w :silent !chmod 755 % :silent !./% > .tmp.xyz \ :tabnew :r .tmp.xyz :silent !rm .tmp.xyz :redraw!
这将写入当前缓冲区,使当前文件可执行(仅限unix),执行它(仅限unix)并将输出重定向到.tmp.xyz,然后创建新选项卡,读取文件然后将其删除.
打破它:
:wwrite current buffer :silent !chmod 755 % make file executable :silent !./% > .tmp.xyz execute file, redirect output :tabnew new tab :r .tmp.xyz read file in new tab :silent !rm .tmp.xyz remove file :redraw! in terminal mode, vim get scrambled this fixes it