Czy użycie ctrl + c zamiast esc do wyjścia z trybu wstawiania psuje coś w vi?

15

Korzystając z vi, możesz wyjść z trybu wstawiania za pomocą Ctrl+ Czamiast bardziej tradycyjnego Esc. Czy są jakieś sytuacje, w których niepożądane byłoby stosowanie w przypadku pierwszego z nich zamiast drugiego? Czy narusza to coś innego niż najlepszą praktykę?

MDMarra
źródło
Niepożądane jest trafienie w to pierwsze przez przypadek, co powoduje błąd Type :quit<Enter> to exit Vimi sprawia, że ​​Google ma sposób na odzyskanie. Naciśnięcie ipowoduje powrót do trybu wstawiania.
Noumenon,

Odpowiedzi:

9

Ctrl-Ci Escnie są takie same w vi/ vimw większości trybów, w tym w trybie wstawiania. Różnica polega na tym, że Escwyzwala skróty, podczas gdy Ctrl-cnie. To, czy ma to dla Ciebie znaczenie, zależy od tego, czy Ty lub dowolne używane wtyczki używają skrótów.


Zauważ, że bezpieczniej jest założyć, Esci Ctrl-Cczy nie oznacza to samo w vim. Innym przykładem z tej samej witryny jest wyjście z trybu wstawiania bloków (nie w vi).

jw013
źródło
Dobrze wiedzieć, ale moje pytanie dotyczyło wyjścia z trybu wstawiania.
MDMarra,
@MDMarra Doh, źle odczytałeś swoje pytanie. Tryb wstawiania jest wciąż inny: patrz zaktualizowana odpowiedź.
jw013,
1
Oto najważniejsza różnica, z jaką miałem do czynienia: wstawka wielowierszowa z trybem blokowania wizualnego działa z Esc, a nie z CC.
fascynacja
4

Myślę, że masz na myśli vim, nie vi.

To naprawdę działa vim, chociaż nie użyłbym tego, chyba że byłbym w 100% pewien, że nigdy nie dotknę systemu operacyjnego innego niż Linux. Powodem jest to, że inne systemy operacyjne mogą mieć własne implementacje vi, które tego nie implementują, i może się okazać, że podczas uruchamiania vina tych platformach Ctrl-C ma swoje tradycyjne zachowanie: przerywa proces i pozostawia terminal w dziwnym stanie .

Michael Hampton
źródło
3
Czy możesz wskazać jakąkolwiek viimplementację, która nadal istnieje, która nie obsługuje Ctrl-C? Zobacz moją odpowiedź na prawdziwą różnicę.
jw013,
2

Jeśli masz na myśli vim, istnieje niewielka różnica. CTRL-Cnie sprawdza skrótów i nie wyzwala InsertLeavezdarzenia. Tak więc Ty lub wtyczki zdefiniowałeś dowolne autocmdinstrukcje, od InsertLeavektórych nie będą uruchamiane.

Z oficjalnej dokumentacji http://vimhelp.appspot.com/insert.txt.html :

<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode.  Finish
                abbreviation.

CTRL-C          Quit insert mode, go back to Normal mode.  Do not check for
                abbreviations.  Does not trigger the InsertLeave autocommand
                event.

Można zdefiniować odwzorowanie dla CTRL-Ccelu <esc>, to będzie wyzwalać InsertLeave.

wisbucky
źródło