Як повернутися до першого символу в командному рядку * nix?


17

Коли ви пишете довгу команду в командному рядку * nix і потрібно повернутися до першого символу, щоб додати щось на початку (наприклад, a nohup, коли ви зрозумієте, що процес буде довгим, або a sudo, коли ви зрозумійте, що вам потрібні права доступу до кореня), щоб курсор повернувся до першого символу, це може зайняти багато часу ...

Чи є скорочення, яке дозволяє стрибати прямо туди?

Я використовую mac, тому Homeце не варіант


2
Якщо ви перебуваєте на ноутбуці Apple, Fn + Вліво / Вправо еквівалентні Home / End. (І, відповідно, Fn + Вгору / Вниз є PageUp / Down.)
duskwuff -inactive-

2
Тим, хто читає це питання, це насправді запитує про оболонку, точніше редагування командного рядка в оболонці. Раніше відповідь Ctrl-A - це збиток (швидше за все) з редагуванням стилю Emacs, за замовчуванням.
Багата Гомолка

4
Альтернатива, якщо вам просто потрібно додати, sudo- це ввести sudo !!. !!Замінюються попередньою командою.
Меттью Крамлі

Відповіді:


29

Ctrl+Aповинні працювати. Ctrl+Eвідповідає кінці командного рядка.


1
Чудово! Це чудово працює і на mac!
clami219

1
Це також стосується багатьох редакторів коду.
Jwosty

2
@ clami219: Він фактично працює в більшості текстових контекстів в OSX. Прив’язки Emacs - чудова річ ...
tommyo

Дякую, він працює і в Linux.
Гедеон Бабу

10

Це залежить від розглянутої оболонки.

Деякі оболонки (наприклад, AT&T ksh88) практично не мають редагування вхідних рядків.

У оболонках, що реалізують viрежим редагування режимів (можливо, вам доведеться це ввімкнути set -o vi), це робиться натисканням Esc(для переходу з режиму вставки) з подальшим переходом 0до початку рядка або $переходу до кінця рядка. Потім повторно введіть режим вставки або натисканням i- курсор залишиться там, де він є, або a- курсор перемістить його праворуч, щоб додати текст.

vi редагування режиму нещодавно було затверджено стандартом POSIX.

Набагато частіше emacs , режим редагування (слава богам, він не має нічого спільного з редактором-слеш-операційній системі Emacs) використовує Ctrl-Aдля переходу на початок рядка і Ctrl-Eперейти до кінця рядка. Цей режим вимагає запуску set -o emacsбагатьох оболонок (найбільш чітко AT&T ksh93), але він за замовчуванням включений у mksh та GNU bash.

Більшість сучасних оболонок підтримують emacsі viрежими, і режими. (Обидва ці режими вимагають роботи TTT.)

У багатьох оболонках ви можете налаштувати клавіші; зазвичай для emacsрежиму, хоча деякі оболонки також дозволяють налаштувати прив'язку клавіш до viрежиму. Якщо у вас є ключ , ви хотіли б мати це неминуче, в першу чергу необхідно з'ясувати , ключові послідовності , які вона виробляє (наприклад, в моїй системі, Alt-CursorLeftвиробляє Esc+[+1+;+3+D( ^[[1;3D; ^Xце Ctrl-Xі ^[є Esc), так що я можу ввести що - щось на зразок

bind '^[[1;3D=beginning-of-line'
bind '"\e[1;3D":beginning-of-line'

і це змінення клавіш буде змінено в залежності від оболонки. Зазвичай їх можна зберегти у файлі запуску ( ~/.mkshrc, ~/.kshrc) або, для GNU bash, в ~/.inputrc. Зауважте, що не всі оболонки підтримують прив'язку всіх клавіш у всіх версіях.

Зазвичай ви можете дізнатись, що символів ключа генерується, просто натиснувши catна оболонку, набравши ключ і переглянувши. Потім натисніть ^C( Ctrl-C), щоб скасувати cat.


Мені подобається використовувати ^ D, символ кінцевої лінії Unix, щоб закінчити кішку. На мій погляд, це ^ D, тому що текстовий потік "зроблено".
Аарон Холл

@AaronHall: це не спрацює, якщо вже є щось на лінії. Плюс ми хочемо її перервати, а не закінчити ;-) Але так, у звичайному випадку ти маєш рацію. Але це особливий випадок.
mirabilos

Термінал може також редагувати рядки.
Семюел Едвін Уорд

@mirabilos Щоб надіслати EOF без нового рядка, просто зробіть ^ D ^ D (тобто натисніть D двічі).
Potatoswatter

@Potatoswatter так (весело, я сам цього не знав), але я спеціально хочу перервати тут. При відправці ^D^Dя все ще отримую «мотлох»
відлунне

2

Ви пробували домашній ключ? Я використовую MobXterm для підключення до linux box і використовую клавішу Home та End на клавіатурі, щоб перейти до першого чи останнього символу команди.


Ти правий! Мені довелося вказати, що я використовую mac ...
clami219

2

Якщо ви перейшли в viрежим, використовуючи set -o vi, ви можете натиснути Escабо на Iабо Aввести текст на початку або в кінці рядка. Або якщо ви просто хочете перемістити курсор, це ^і є $.


vi режим якої оболонки?
Девід Річербі

2

У режимі emacs (перемикається на:) set -o emacsце натисканням:

  • Ctrl+A і Ctrl+E
  • Home і End
  • Esc+bі Esc+f(переміщує курсор назад і вперед поточного слова)

У режимі vi (перемикається на:), set -o viколи в командному режимі ( Esc) це натисканням:

  • 0/ ^і $(він залишиться в командному режимі)
  • Iі A(перейде в режим редагування)

Дивись також:

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