假设我在shell中(bash),想要查看:scriptnames会提供的输出,但是不想启动vim,或者我想将其回显到另一个文件中。执行

vim +scriptnames


向我展示了所有脚本,但是如何将其回显到shell的标准输出中?

#1 楼

发生这种情况是因为通常Vim会切换到备用屏幕并在那里工作。退出后,Vim会切换回去,因此您看不到Vim会话留下的任何东西,但是即使在启动Vim之前执行命令的结果也是如此。

此功能在:h xterm-screens(链接)中进行了解释。您可以通过将执行此操作的端子代码设置为:set t_ti= t_te=来清空。

将它们放在一起,您可能想像这样启动Vim:

vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'

我们正在重置'more'选项,以便您不要看不到提示输入的提示。

评论


太好了,非常感谢!我实际上怀疑这是否可能。

– hgiesel
16年7月17日在15:00

通过使VimL写入stdout(特别是受虐狂),是否可以将VimL用作完整的系统脚本语言?

–shadowtalker
16年7月17日在16:17

一个问题是我无法滚动终端。 (如果文本长于终端高度,则看不到顶部)。如果我打开vim然后退出,文本也会消失。

–FDinoff
16年7月17日在16:19

@FDinoff这就是不那么喜欢的传呼机的用途。只是将其传送到不太像vim -c':set t_ti = t_te = no'-c'scriptnames | q! |减。布局可能一开始就搞砸了(在我的终端中),但是按后,一切都很好而且很漂亮。

– hgiesel
16年7月17日在16:50

运行vim -c':set t_ti = t_te = nomore'-c'scriptnames | q!'时,我看不到任何输出,只有“快速闪烁”,命令退出,代码为0,没有输出。我想念什么吗?

–TrungDQ
17/12/4在3:50



#2 楼

我们还可以使用:redir命令将vim命令的结果重定向到文件中

例如
放入文件“ vimout”

#3 楼

我感谢Christian Brabandt提供的答案,但我认为更好的答案是使用另一个-c命令来分隔quit命令,如下所示:您可以将许多不同的命令串在一起,然后使用最后的“ q!”退出vim。

#4 楼

对于Neovim,请使用
nvim --headless -c 'command'


评论


欢迎来到Vi和Vim!由于答案的长度,您的答案会自动标记为低质量。可以通过编辑来改进此答案,以解释这是如何完成工作的,或者为什么它对于neovim有所不同。

– D. Ben Knoble♦
20-10-13在12:59

#5 楼

对于需要像手动启动一样完全加载vim的情况,可以使用以下方法:例如,我想重定向:map的输出到shell中的文件,但我想捕获vim-airline仅在显示其标签线(顶部的行显示所有缓冲区名称已打开)后创建的映射。因为它似乎是异步进行的,因此只需运行-c重定向到文件没有给它时间来进行映射。可能有更好的方法,但这对我有用,尤其是因为我已经将updatetime设置为100(0.1秒),这会影响到触发CursorHold事件的时间。默认情况下,vim将其设置为4秒。

vim -c "autocmd! CursorHold * <commands to run>"