想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
2年前关闭。
当我们写命令
vi <filename>
时,究竟会发生什么-没有打开任何新窗口,看来它肯定会从外壳程序中进入其他模式。当我们离开vi
时,我们回到外壳。它是否使用哈希检查
<filename>
是否已经存在以及是否:用户使用
create
系统调用在磁盘上保留空间时,该目录不存在于用户输入的目录中。如果存在,则使用系统调用
open
。除此之外,
nano
和emacs
等所有文本编辑器还会发生这种情况吗? 最佳答案
vi
使用终端(实际上是terminal emulators)。用Unix的话来说,它是tty。读取The TTY Demystified,tty(4)(对于/dev/tty
),pty(7)(pseudoterminals)。
它使用一些在ncurses之上构建的终端库,例如termios(3)。另请参见ioctl_tty(2)(实际上vim
不使用ncurses
,而只是与ncurses相关的较低级别libtinfo
)
看来它肯定会从外壳程序中进入其他模式。
那不是shell的模式,而是tty的模式(与终端仿真器打交道)。 ANSI escapes codes也相关。
另请参见stty(1)。
终端IO不仅缓存在libc中,而且还缓存在内核中。了解有关line discipline的信息。
关于编辑文件,vi
的工作方式与大多数text editors一样,它在内存中维护描述缓冲区当前内容的数据结构,并在内存中处理该结构。仅在保存缓冲区时,才将内容写入文件(使用与文件相关的系统调用,如open(2),write(2),close(2))。
顺便说一句,vim
是免费软件(或开源),因此请下载并研究其vim
的ncurses
。并且source code和emacs也是免费软件。
花一些时间阅读一些好的Linux系统编程书籍(例如旧的nano或更新的书籍),然后再阅读ALP。请注意,终端IO的细节非常复杂(因为syscalls(2),例如terminals或VT100很复杂)。因此,您可能想使用之类的库(或者可能是VT220)
关于linux - 在 shell 上打开Vi编辑器时会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51697294/