19

Так что я использую в своей оболочке up ( в основном Bash на OSX или Ubuntu), но иногда я знаю, что мне нужны вещи после текущего местоположения курсора. Есть ли какой-нибудь способ, чтобы у меня была линия, полная линии выше? Попадание , а затем влево раздражает.

Любые другие трюки тоже были бы классными, кроме вкладки, о которой мы все сейчас говорим :)

Вот пример (по запросу кряка):

Я mkdir /where/the/hell/is/that/thing и затем хочу перейти в тот же каталог. Но теперь я знаю о мета-б :)

6 ответов6

26

Вы должны прочитать man bash в вашей системе, особенно раздел Readline, так как это интерактивный механизм ввода bash. В руководстве по Bash на gnu.org есть хороший раздел по редактированию командной строки , который поможет заполнить некоторые пробелы.

По умолчанию вы можете использовать их для перемещения по командной строке (просто перечислите несколько здесь; см. Ссылку для полного списка):

  • Ctrl+a перемещает в начало строки (или Home в зависимости от настроек терминала)
  • Ctrl+e перемещается в конец строки (или End ...)
  • Meta+f продвигает "слово"
  • Meta+b движется назад на "слово"

Вы можете использовать их, чтобы "убить" (или "вырезать") текст из строки:

  • Ctrl+k убивает ("режет") текст с текущей позиции курсора до конца строки
  • Ctrl+y возвращает ("вставляет") последний убитый текст обратно в буфер по курсору

Таким образом, вы можете объединить их, чтобы выбрать кусок какой-то командной строки, которую вы хотите повторить, убить ее, а затем вставить в конец следующей команды.


Теперь, чтобы сделать его еще более увлекательным, давайте рассмотрим расширение истории bash. Это то !! ответ того Студера упоминает. Расширение истории разбивается на указатели событий, обозначения слов и модификаторы.

Обозначения событий выглядят следующим образом (снова см. Ссылки для полного списка):

  • ! - начинается подмена истории
  • !n - n-я команда в списке истории bash, для некоторого целого числа n (работает и для негативов)
  • !! - предыдущая команда; эквивалентно !-1
  • !string - самая последняя команда, начинающаяся со строки

Обозначения слов выбирают определенные части из события. Использование : для отделения события от обозначения слова. Слова нумеруются от 0, начиная с начала строки, и вставляются в текущую строку, разделенные пробелами.

  • $ - обозначает последний аргумент (например, !!:$ - последний аргумент последней команды; может быть сокращен до !$)
  • n - обозначает n-е слово (например !str:2 является вторым аргументом самой последней команды, начинающейся с str ; !!:0 это команда последней команды)

Итак, для продолжения вашего примера, если ваша последняя команда mkdir /some/really/long/path , просто выполняется !! снова запустит эту команду. Но вы хотите , чтобы cd в этот путь вместо:

$ cd !$

Теперь предположим, что вы выполняете некоторые другие команды, а затем хотите снова вернуться к этому пути. Если это была последняя команда mkdir, которую вы выполнили, вы можете использовать это, чтобы повторить этот путь:

$ tar czf ~/foo.tgz !mkdir:$
11

Попробуй это:

mkdir /where/the/hell/is/that/thing

затем нажмите alt+.

в зависимости от вашей операционной системы и терминала вам может потребоваться набрать esc .

Вы также можете нажать Alt+1+. выбрать конкретный предыдущий аргумент.

Это намного лучше чем !! или же !$, потому что вы можете увидеть, что вы собираетесь запустить, и в любом случае это займет меньше нажатий клавиш.

edit: строго говоря, это meta not alt, поэтому он также может работать с клавишей "windows" в зависимости от настроек клавиатуры.

6

Если вы пользователь vi, вы можете перевести оболочку в режим vi, набрав set -o vi .

После этого вы можете делать все что угодно в командной строке после ввода Esc + k .

Больше всего я использую Esc+K затем / любой текст, набранный после косой черты, будет использоваться для поиска по истории вашей командной строки.

Например, Esc + k /smbclient выдаст последнюю введенную вами команду smbclient. Вы можете прокручивать все поиски, используя стандартные клавиши vi (j и k для перемещения вверх и вниз, но я думаю, что стрелки вверх и вниз также будут работать).

Дополнительная помощь здесь, есть также некоторые встроенные вещи bash по этой ссылке, которые могут быть больше, чем вы ищете.

Ура, Stu.

3

Вы можете использовать !! который представляет последнюю команду:

% test
% echo !!
> test
0

В приведенном вами примере используйте!$ для представления последнего параметра предыдущей команды:

mkdir / что-то / что-то другое

CD !$

Вы также можете использовать пронумерованные варианты для извлечения определенных параметров предыдущих команд.

0

Недавно я нашел этот чит-лист очень полезным. Много чего я не знал. Я привык использовать !$ все время, пока я не узнал об Alt+., который я сейчас использую все время. :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .