vim和unix管道

时间:2012-07-12 08:52:35

标签: shell unix vim

我今天跑了一个有趣的命令,看起来像 vi filename | vi - 。 它使我的终端卡住甚至Ctrl-C都没用。 我不得不关闭终端。 我尝试了几次并尝试了我的朋友机器。只是想知道为什么Ctrl-C也无法提供帮助。

3 个答案:

答案 0 :(得分:3)

vi 正在从标准输入读取。

vi 中编辑时,Ctrl + c 也不起作用。

要退出 vi ,请使用:q :q!,就像在正常的 vi 会话中一样。

答案 1 :(得分:1)

使用POSIX功能信号(),如果有键盘中断,C程序可以选择该怎么办。

以下是一个示例(从this site复制而来):

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

FILE *temp_file;
void leave(int sig);

main() {
    (void) signal(SIGINT, leave);
    temp_file = fopen("tmp", "w");

    for(;;) {
        /*
        * Do things....
        */
        printf("Ready...\n");
        (void)getchar();
    }

    /* cant get here ... */
    exit(EXIT_SUCCESS);
}

/*
 * on receipt of SIGINT, close tmp file
 */
void leave(int sig) {
    fprintf(temp_file,"\nInterrupted..\n");
    fclose(temp_file);
    exit(sig);
}

但是你可以看到,vi不使用键盘中断退出。无论您是否在管道中使用它都无关紧要。

答案 2 :(得分:0)

Vi拦截ctrl-c(它几乎等同于esc),因此ctrl-c无法在该设置中退出应用程序。

我可以使用ctrl-z然后使用kill %

逃离该陷阱