当我们在外壳上打开Vi编辑器时会发生什么

时间:2018-08-05 18:45:08

标签: linux bash vi

当我们写命令vi <filename>时,究竟会发生什么-没有打开任何新窗口,看来它肯定会进入 shell 之外的其他模式。然后,当我们离开vi之后,我们将返回外壳。

它是否使用哈希检查<filename>是否已经存在以及是否:

  • 它不存在于用户使用create系统调用在磁盘上保留空间的用户输入的目录中。
  • 如果存在,则使用系统调用open

除此之外,nanoemacs之类的所有文本编辑器还会发生这种情况吗?

1 个答案:

答案 0 :(得分:3)

vi使用终端(实际上是terminal emulators)。用Unix的话来说是一个tty。阅读The TTY Demystifiedtty(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中的source codeemacsnano也是免费软件。

花点时间阅读一些不错的Linux系统编程书籍(例如旧的ALP或更新的书籍),然后再阅读syscalls(2)。请注意,终端IO的细节非常复杂(因为terminals(例如VT100VT220很复杂)。因此,您可能想使用ncurses(或readline)之类的库