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'
选项,以便您不要看不到提示输入的提示。#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>"
评论
太好了,非常感谢!我实际上怀疑这是否可能。
– 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