尝试通过<()在vim中编辑时文件不再可用


2

当与水手一起工作时,我经常做诸如

vim <(hg cat -r 42 somefile)

但是,如果我用大于几百行的文件尝试此操作,则会在vim中收到读取错误,并且仅包括前几百行。如果我使用gvim而不是vim,则会出现如下错误

E211: FIle "/proc/3546/fd/63" no longer available

这不行吗?我不知道它是否相关,但是我在bash和zsh中都尝试过,结果相同,而且我也尝试过

cat <(hg cat -r 42 somefile)

如我所料,它将打印整个文件。

Answers:


2

这些是管道,不是常规文件。当vim关闭文件描述符时,它消失了。您可以这样做:

hg cat -r 42 somefile | vim -

vim被告知它可能不是常规文件,因此行为会相应。使用,vim -R -或者view -如果您不想vim抱怨在退出时尚未保存数据)。

或使用zsh,使用一个临时文件:

vim =(hg cat -r 42 somefile)

感谢您的快速答复,尽管我不确定我是否理解“ vim关闭文件描述符时它消失了”的含义。当我尝试打开文件时发生读取错误。另外,为了澄清起见,我知道我不能以这种方式编辑文件,我只想将其加载到vim中进行浏览。
Tor

如果关闭,则下一次打开它的尝试将失败。通常,当您运行gvim时,gvim会分叉一个进程,并且可能在关闭大多数fds之后尝试断开与终端的连接。
斯特凡Chazelas

喔好吧。虽然当我尝试在终端中的vim中打开文件时也会发生同样的情况。为什么它设法读取文件的一部分?(我并不是想变得困难,我只是对这些事情感到好奇。)
Tor

@Tor,例如,我无法复制它vim <(seq 100000)。无论如何,我都不希望出现读取错误。您得到的确切错误是什么?请注意,如果autocmds调用的任何内容(例如试图检测文件类型或从文件中获取信息的内容)打开并读取了管道,则它们所读取的内容将在vim中丢失。
斯特凡Chazelas

当我在终端中的vim中打开时,底行显示例如“ / proc / self / fd / 11” [fifo / socket] [读取错误] [dos] 238L,8192C。该文件实际上是2935行。不过,这似乎非常随机。某些文件为2500行,而某些文件为3000行就可以了。但是,每当出现读取错误时,它就会读取8192个字符。
Tor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.