2013-03-31 13 views
38

Próbuję odwzorować Cmd + Delete (backspace), aby usunąć na początku linii (tak jak działa w przeglądarkach i edytorach tekstu) w systemie iTerm2 i nie mogę znaleźć działającego kodu ucieczki. Próbowałem 1K (^[1K) na podstawie tego, co przeczytałem: here ... Po prostu wypisuje "K".iTerm2: usunąć linię?

Edytuj: Znalazłem Ctrl + U. Teraz dowiesz się, jak go zmapować. Może kod szesnastkowy 21 (U jest 21 literą), więc 0x15?

+3

spróbować 'Ctrl + A CTRL + K' w międzyczasie. Lub 'CTRL + C' – Carlos

+1

ctrl + K jest dobrym do nauczenia się na pewno. Ale jestem bardziej przyzwyczajony do cmd + delete. Muszę to mieć! Działa wszędzie! –

+1

Oto kilka innych przydatnych informacji. 'ALT + Backspace' -> Wyślij Hex 0x17,' ALT + RightArrow' -> Send Exc Seq f, 'ALT + LeftArrow' -> Send Exc Seq b – Carlos

Odpowiedz

65

Mam to. Nie mam pojęcia, dlaczego odwzorowania kodu heksadecymalnego w systemie iTerm2 generują powiązane odwzorowania klawiszy Ctrl +, ale tak właśnie jest. Nie mam pojęcia, co oznacza 0x00, ponieważ nie jest przypisane do A, jak można się było spodziewać. (Sądzę jednak, że Unix ma swoje własne konwencje dotyczące traktowania pustych bajtów - mamy np. xargs akceptowanie na przykład formatu ograniczającego bajty null z find - Byłoby fajnie, gdybyśmy mogli powiązać to z klawiszem skrótu z iTerm2)

Udało mi się znaleźć, że Ctrl + U wykonuje prawie dokładnie to, czego potrzebuję (usuwa całą linię zamiast usuwać tylko to, co jest przed kursorem, ale cokolwiek ... Ctrl + Y jako bonus może przynieść wszystko z powrotem) . Wtedy z zaciekawieniem zauważyłem, że mam kody heksadecymalne 0x1 i 0x5 odwzorowane odpowiednio na ^A i ^E, dla mojego Cmd + Left i Cmd + Right ... więc 0x15 jest dla ^U!

+0

Chciałbym móc powtórzyć to jeszcze 5 razy. Spędzam tak dużo czasu, szukając tego. Jak sądzisz 0x15 od 0x1 i 0x5? – bizi

+0

jest to: hex (char ("U") - char ("A") + 1) – bizi

+2

Haha, cóż, "u" to tylko 21. litera alfabetu! Dlatego uważam, że wyrażenie jest prawidłowe. –

7

Mam nadzieję, że może to pomóc http://felipecsl.com/blog/2012/06/05/protip-delete-words-on-iterm2-mac-osx/

mapę ⌥ < - Usuń, aby wysyłać kody hex: 0x1b 0x08

miałem test na to, i to jest prawidłowe.


aktualizacja 18.09.2013

to usunąć jedno słowo, a nie liniowy.

+1

To jest interesujące! To, co opisujesz, jest równoważne Alt + Ctrl + H, którego moja szczególna konfiguracja PuTTY również pojawia się po naciśnięciu Alt + Ctrl + Backspace. W mojej powłoce zsh cofa się nad słowem (nie całą linią). –

+0

Zwrócę uwagę, że Ctrl + H '^ H' ma w rzeczywistości oznaczać" backspace "dla wielu terminali. Prefiks Alt-/meta-/escape zamieniający to w "słowo-zabójstwo" wydaje się sensowny, chociaż nie jest jasne, jak szeroko jest obsługiwany. –

+1

Usuwa słowo, a nie linię, ale dokładnie to, czego szukałem :) – hyouuu

-2

Jak wskazano ^U usuwa linię. Możesz łatwo zmienić polecenie, używając Better Touch Tool.

Posiada również fajne funkcje do automatyzacji, mapowania myszy, padów i klawiatury. Zawiera również funkcję okna dla inteligentnych granic.

19

kod mapowania hex 0x15 do + ← Usuwanie w większości powłok usuwa całą linię (zawartość do lewej i prawej strony kursora). Chociaż czasami nie za zgodną, ​​uważam, że mapowanie:

+ ← Usuwanie aby wysyłać kody hex:

0x18 0x7f

wykonuje żądaną funkcjonalność. Jeśli używasz zsh, będziesz prawdopodobnie również trzeba dodać to do pliku .zshrc:

$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc 

jako domyślnie ZSH nie mapuje backward-kill-line do niczego.

pisałem kompleksowy przewodnik dodanie dodania większość standardowa kombinacja klawiszy OSX do terminalu here

+0

Interesujące. Te wartości szesnastkowe odpowiadają Ctrl + X (anuluj), DEL (zobacz wykres ascii). Jest całkiem rozsądne, aby ta sekwencja została zinterpretowana jako silniejsza forma DEL, chociaż jest to pierwsze, o czym słyszę. Kiedy jednak wpisuję go w terminalu (bez ustawiania jakichkolwiek powiązań, na Linuksie), Zsh po prostu wydaje mi dźwięk, a Bash wstawia '^ X', a backspace po prostu go kasuje. Spróbowałem tego z keybind w iTerm (który wyśle ​​sekwencję razem bez ludzkiego opóźnienia) i zobaczę to samo zachowanie.to wskazuje mi, że bash również wymagałby dla niego wiązania. –

+0

Ale masz całkowitą rację, że '' backward-kill-line' to ta, której używasz dla prawdziwej parzystości z '⌘ + ← Delete'. Dodatkowa konfiguracja jest tylko trochę uciążliwa, ale wcale nie jest taka zła. –

Powiązane problemy