iTerm2: видалити рядок?


81

Я намагаюся зіставити ⌘+Delete(зворотний простір) для видалення на початок рядка (як це працює у браузерах та текстових редакторах) у iTerm2, і я не можу знайти для нього діючий вихідний код. Я спробував 1K ( ^[1K) на основі прочитаного у Вікіпедії . Він просто друкує "К".

Редагувати: я знайшов Ctrl+U. Тепер дізнаємося, як його нанести на карту. Можливо, шістнадцятковий код 21 (U - це 21-я буква), значить 0x15?


3
спробуйте CTRL+A CTRL+Kтим часом. АбоCTRL+C
Карлос

1
ctrl + K - це гарний варіант, щоб навчитися напевно. Але я більше звик cmd + видалити. У мене це повинно бути! Це працює скрізь деінде!
Стівен Лу

1
Ось ще декілька, які можуть вам виявитися корисними. ALT+Backspace-> Надіслати Hex 0x17, ALT+RightArrow-> Надіслати Exc Seq f, ALT+LeftArrow-> Надіслати Exc Seq b
Carlos

Alt + Delete вже відпрацьовано з коробки. Я нещодавно встановив ^ [b і ^ [f, і вони чудово працюють. Я дуже хочу, щоб Cmd + Delete видалив весь рядок.
Стівен Лу

@Carlos, хороший момент з комбінацією клавіш ctrl + C, і я робив це зовсім небагато. Хоча це інша поведінка, і я теж не хочу випадково припиняти речі. Наприклад, якщо я перебуваю в якомусь інтерпретаторі і хочу видалити рядок, який я в нього ввів. Ctrl + C працює лише у певному стані, і такий тип залежності від стану - це саме те, від чого я намагаюся піти. Залежність держави є загрозою для використання.
Стівен Лу

Відповіді:


127

Зрозумів. Я не уявляю, чому зіставлення шістнадцяткового коду в iTerm2 виробляють відповідні відображення клавіш Ctrl +, але вони це роблять. Не маємо уявлення, що означає 0x00, оскільки він не присвоєний A, як можна було очікувати. (хоча я дійсно вважаю, що Unix має свої власні правила щодо обробки нульових байт - ми, наприклад, xargsприймаємо формат, що обмежує нульові байти, findнаприклад, було б чудово, якби ми могли прив'язати це до гарячої клавіші за допомогою iTerm2)

Мені вдалося виявити, що Ctrl + U виконує майже точне завдання, яке я хочу (він видаляє весь рядок, а не видаляє лише те, що перед курсором, але що завгодно ... Ctrl + Y як бонус може повернути все це назад). Потім я з цікавістю побачив, що у мене є шістнадцяткові коди 0x1і 0x5зіставлені ^Aта ^Eвідповідно для мого Cmd + Left та Cmd + Right ... так 0x15це для ^U!


1
Я би хотів, щоб я проголосував за це ще 5 разів. Я витрачаю стільки часу на це. Як ви розраховуєте 0x15 від 0x1 і 0x5?
bizi

2
Ха-ха, ну uце лише 21-я буква алфавіту! Тому я вважаю, що вираз правильний.
Steven Lu

2
Для інформації, дотримуючись тієї самої логіки, щоб видалити до КІНЦЯ рядка, Ctrl-K ... K - це 11-та буква алфавіту або 0xB у шістнадцятковій. Тож призначте 'Command-Del->' hex 0xB для видалення до кінця рядка.
user2707671

1
@bizi Розширюючи відповідь Стівена Лу, "u" є 21-ю, а "k" 11-ю літерою алфавіту, бажаними шістнадцятковими кодами є hex (21) і hex (11), які виходять на "0x15" & "0xb '. Я виявив, що шукаю їх частіше, тому для зручності просто біжи (замінюючи x, звичайно, на потрібний лист): python -c "import string; print(hex(string.ascii_lowercase.find('x') + 1))" або якщо ти хочеш отримати фантазії / розваги, додай це до свого ~/.bashrcабо ~/.bash_profile: alias hexletter='python -c "import string,sys; print(hex(string.ascii_lowercase.find(sys.argv[-1]) + 1))"'
TCAllen07

2
Просто залишу це тут. garbagecollected.org/2017/01/31/four-column-ascii
Стівен Лу

42

Зіставлення шістнадцяткового коду 0x15з + ←Deleteу більшості оболонок видаляє весь рядок (вміст ліворуч та праворуч курсору). Хоча іноді не настільки сумісні, я вважаю, що відображення:

+ ←Deleteдля надсилання шістнадцяткових кодів:

0x18 0x7f

виконує бажану функціональність. Якщо ви використовуєте ZSH, вам, ймовірно, також потрібно буде додати це у свій файл .zshrc:

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

оскільки за замовчуванням ZSH ні backward-kill-lineдо чого не відображається .

Крім того, ви також можете видалити все праворуч від курсору, зіставивши:

+ fn+ ←Deleteабо + Delete→для надсилання шістнадцяткових кодів:

0x0b

Я написав вичерпний посібник із додавання сюди більшості стандартних прив'язок клавіш OSX до вашого терміналу


Цікаво. Ці шістнадцяткові значення відповідають Ctrl + X (скасувати), DEL (див. Таблицю ascii). Цілком розумно, щоб цю послідовність трактували як більш потужну форму DEL, хоча це перше, про що я чую. Коли я набираю його в терміналі (не встановлюючи жодних прив'язок, в Linux), Zsh просто подає звуковий сигнал, а Bash просто вставляє a, ^Xа потім зворотний простір просто стирає його. Я спробував це за допомогою прив'язки клавіш у iTerm (яка надсилатиме послідовність разом без затримки людини) і побачити ту саму поведінку. це вказує мені, що для bash також знадобиться прив'язка.
Стівен Лу

Але ви абсолютно праві, backward-kill-lineсаме з ним слід використовувати справжній паритет ⌘ + ←Delete. Додаткова конфігурація трохи громіздка, хоча це зовсім не погано.
Стівен Лу

Чомусь він видаляє його з історії. Коли я використовую стрілку вгору, я більше не отримую видалений запис
Xitcod13,

38

В OSX ⌥ + ⌫ та ⌘ + ⌫ - це ярлики для видалення слова та видалення рядка відповідно. ← + ← та ⌘ + → призначені для переходу на початок і кінець рядків. За замовчуванням iTerm2 не налаштований таким чином, і в Інтернеті є багато оманливих посібників. Далі є те, що я виявив, що працює на моїй машині.

  1. Відкрийте налаштування (⌘ +,) і перейдіть на вкладку Ключі.
  2. Додайте загальну клавішу швидкого доступу та просто введіть ярлик
  3. У спадному меню Дія виберіть Надіслати шістнадцятковий код

Шістнадцяткові коди для ...

  1. Видалення слова: 0x17.
  2. Видалення рядка: 0x15.
  3. Перехід до початку рядка: 0x01.
  4. Перехід до кінця рядка: 0x05. Просто відкрийте нову вкладку, і вона повинна працювати!

Ось знімок екрана для наочності: текст заміщення


ти врятував мій день!
Джеррі

27

Для Mac OS більшість редакторів мають спільний ярлик + Delete: delete для початку рядка, в iTerm2 ми можемо перейти до цієї конфігурації ключів

введіть тут опис зображення


Це чудово. Я вручну додавав пресети, намагаючись отримати "Природне редагування тексту", і цей пресет завантажив усе, що мені потрібно, одним пострілом.
claviska

15

Сподіваюся, це може вам допомогти

map ⌥ <- Видалити для надсилання шістнадцяткових кодів: 0x1B 0x08

У мене був тест на це, і це правильно.


18.09.2013 оновлення

при цьому видаляється одне слово, а не рядок.


1
Це цікаво! Те, що ви описуєте, еквівалентно Alt + Ctrl + H, яке моє конкретне налаштування PuTTY також видає при натисканні Alt + Ctrl + Backspace. У моїй оболонці zsh він має зворотний простір над словом (а не цілим рядком).
Стівен Лу

Зазначу, що Ctrl + H ^H фактично означає "зворотний простір" для багатьох терміналів. Префікс Alt- / meta- / escape-перетворення, що перетворює це на "слово-вбивство", здається розумним, хоча незрозуміло, наскільки це широко підтримується.
Steven Lu

1
Це видалення слова не рядка, а саме того, що я шукав :)
hyouuu

Дякую дякую дякую дякую дякую дякую. Я поняття не маю, що змінилося, але це була точна поведінка на моєму старому Mac (і, власне, так це працює в цьому текстовому полі), але чомусь на моєму новому Mac це було зовсім інакше. Кожна інша пропозиція змусила його поводитися з "foo / bar / baz" як одне слово, а не як 3.
Дан

4

Як вказав, ^Uвидаляє рядок. Ви можете легко переназначити команду, використовуючи Better Touch Tool .

Він також має цікаві функції для автоматизації, відображення миші, клавіатури та клавіатури. Також включає функцію вікна для розумних меж.


Я думаю, що деякі люди шукають вбудоване рішення і не хочуть використовувати додаткові інструменти, отже, голос проти. На жаль, це не завжди можливо, і перехід на другий інструмент є хорошим шахрайством.
Рудольф Реал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.