如何将vim的输出重定向到终端?

时间:2019-01-11 10:13:43

标签: vim

我目前正在编写一个小的bash脚本,以在特定位置创建一个预填充文件。为此,我的bash脚本调用vim并执行一个vim脚本。 在这个vim脚本中,我想问用户要保存创建的文件的位置是否正确。然后,用户输入是或否。 为此,我使用了以下命令:

call inputsave()
let name = input('Is it the correct location ? y/n')
call inputrestore()

当我在gvim或vim中时,此输入功能可以正常工作。但是从脚本来看,启动bash脚本的终端没有显示任何内容。

是否可以将输出重定向到我的终端?

我发现了:redir > {file},但这显然是将所有vim输出重定向到一个非交互式文件。

我还设法通过以下方式在终端中回显了一些内容:

let tmp = "!echo what I want to display"
execute tmp
unlet tmp

但同样这只是为了显示内容。我将无法输入输入

我的bash脚本:

#!/bin/bash
touch tmp.txt #file used to pass argument to vim
echo "$1" >> tmp.txt #append argument to the end of the txt file
vim -e tmp.txt <create_new_file.vim #launch vim and execute the scrip inside create_new_file.vim
rm tmp.txt
echo "new file created"

create_new_file.vim基本上只是调用位于我的CreateFile(_name)中的函数.vimrc。此函数调用inputsave()input()inputrestore()

1 个答案:

答案 0 :(得分:3)

您通过标准输入将命令直接输入Vim;这样,Vim无法与您(用户)进行交互,并且这种对Vim的使用是非典型的,因此不鼓励使用。

替代品

除非确实需要特殊的Vim功能,否则最好使用非交互式工具,例如sedawk或Perl / Python / Ruby / < em>您最喜欢的脚本语言在这里。

也就是说,您可以非交互式地使用Vim:

完全自动化

要获得涉及多个窗口的更高级处理以及Vim的真正自动化(您可以在其中与用户互动或让Vim运行以让用户接管),请使用:

vim -N -u NONE -n -c "set nomore" -S "create_new_file.vim" tmp.txt

这应该允许您在遵循命令脚本的同时与Vim交互。

以下是使用(或有用)参数的摘要:

-N -u NONE        Do not load vimrc and plugins, alternatively:
--noplugin        Do not load plugins.
-n                No swapfile.
-i NONE           Ignore the |viminfo| file (to avoid disturbing the
                  user's settings).
-es               Ex mode + silent batch mode -s-ex
                  Attention: Must be given in that order!
-S ...            Source script.
-c 'set nomore'   Suppress the more-prompt when the screen is filled
                  with messages or output to avoid blocking.