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