Почему CTRL + C не выходит из vim? [дубликат]

La programación entre padre e hijo ya se ha discutido (al menos )en Cuándo se ejecutan los procesos secundarios y Cómo funciona realmente la llamada al sistema de bifurcación .

Pero en este caso, también está la cuestión del almacenamiento en búfer dentro de stdio. Está utilizando fprintf()para escribir en un archivo normal. De forma predeterminada, stdioalmacena la salida en archivos regulares hasta que se escriben suficientes datos, para ahorrar en la sobrecarga de llamadas al sistema. En x86 Linux, por lo general parece escribir en bloques de 4096 bytes, pero no puede contar con eso, a menos que configure el almacenamiento en búfer manualmente (consultesetbuf()y amigos ).

Puede ver esto con un comando como straceque muestra las llamadas al sistema que hace un programa.

Entonces, aunque no puede hacer ninguna predicción sobre qué proceso se ejecuta primero, en este caso puede predecir que los ase escriben consecutivamente, y los btambién.Solo puede obtener bbbbbaaaaaaaaaao aaaaaaaaaabbbbb, y cuál obtiene depende del azar.

0
14.06.2019, 20:54
1 ответ

My question is this: Why doesn't vim follow this well-established convention? Is there a historical reason, or is it something else?

Потому что vimследует другому старому и хорошо -установившемуся соглашению, согласно которому Control -C внутри интерактивной программы прерывает текущую команду, а не всю программу. Этому соглашению также следуют интерактивные оболочки --a Control -C уничтожит не вашу оболочку, а команду, которую она выполняла или собиралась выполнить.

Программы, которые не следуют этому соглашению, обычно пытаются смягчить ужас, ловя SIGINTи спрашивая пользователя «вы действительно хотите выйти» или «используйте выход для выхода» и т. д., что отвлекает их от неприятный до раздражающего.

Другие очень хорошо зарекомендовавшие себя соглашения для Control -C заключаются в том, чтобы использовать его в качестве префикса для других команд (, как в программах, вдохновленных emacs -,где Control -G берет на себя роль Control -C )или для копирования выделения в буфер обмена.

3
28.01.2020, 02:22

Теги

Похожие вопросы