Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        2年前关闭。
                                                                                            
                
        
当我们写命令vi <filename>时,究竟会发生什么-没有打开任何新窗口,看来它肯定会从外壳程序中进入其他模式。当我们离开vi时,我们回到外壳。

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


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


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

最佳答案

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是免费软件(或开源),因此请下载并研究其vimncurses。并且source codeemacs也是免费软件。

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

关于linux - 在 shell 上打开Vi编辑器时会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51697294/

10-12 21:06