Помните половину типизированной команды, пока я проверяю что-то

Я часто нахожусь в следующем положении: я начал набирать длинную команду в приглашении bash, но на полпути я узнал, что мне нужно проверить что-то с помощью другой команды. Это проблема, когда я нахожусь на консоли (нет X), что часто бывает, потому что тогда у меня есть только следующие неудовлетворительные способы сделать это, о которых я знаю:

  • Нажмите ctrl + alt + F2 и войдите в систему на другой виртуальной консоли и узнайте, что я хочу, затем вернитесь и продолжайте
  • ctrl + a , введите echo + space + enter , узнайте, что я хочу, нажмите ↑, пока не найду свою команду, ctrl + a , del x 5, ctrl + e и продолжите
  • Выделите, что я набрал до сих пор с помощью мыши (если gpm запущен, что обычно есть), нажмите ctrl + c, чтобы прервать, узнайте, что я хотел, пытаясь не использовать мою мышь, чтобы выделить материал, затем нажмите средний кнопку мыши в новом приглашении и продолжить
  • Молитесь богам командной строки о том, что наполовину написанная команда не будет иметь никаких побочных эффектов, но просто терпит неудачу, и осторожно нажмите кнопку ввода, затем узнайте, что я хочу, нажмите вверх, пока я не получу свою команду, и продолжайте
  • Перепрыгните в мою машину времени, вернитесь во времени и напомните себе, чтобы начать работу перед тем, как начать вводить команду, вернуться в настоящее время, нажать ctrl + c , узнать, что я хочу, нажать ctrl + ctrl + a и продолжить

Так что я хочу знать, есть ли еще более элегантный способ сделать это? Что-то вроде подоболочки или что-то подобное?

Меня больше всего интересуют методы, которые не требуют каких-либо подготовки или настройки для работы.

10 Solutions collect form web for “Помните половину типизированной команды, пока я проверяю что-то”

Несколько более быстрая версия alex Ctrl + A Ctrl + K (которая перемещается к передней части строки и затем разрезает все вперед) состоит в том, чтобы просто использовать Ctrl + U , который отбрасывает назад на bash, и всю строку (независимо от текущей позиция) на zsh. Затем вы используете Ctrl + Y, чтобы вставить его снова

Сделайте ctrl-A, чтобы перейти к началу строки, добавьте хеш и нажмите return – таким образом он останется в истории команд как комментарий, и вы можете вернуться к нему с помощью курсора вверх

EDIT: только что заметил, что это немного более элегантный вариант на вашем # 2;)

Нажмите Ctrl+A , Ctrl+K чтобы перейти к началу строки и удалить (убить) до конца. Затем сделайте свое исследование и, когда будете готовы продолжить, нажмите Ctrl+Y (yank), чтобы вернуть сохраненную (убитую) строку.

В zsh я набираю Ctrl + Z, чтобы «приостановить» команду, которую я набираю, и введите другую команду. После того, как я запустил эту команду (или прервал ее с помощью Ctrl + C ), приостановленная команда возвращается для выпуска (даже помня о позиции курсора). В качестве дополнительного удобства, если командная строка пуста, когда я набираю Ctrl + Z , ключ вызывает вместо этого встроенный bg (так что двойной Ctrl + Z отправляет бегущую команду непосредственно на задний план).

 fancy-ctrl-z () { emulate -LR zsh if [[ $#BUFFER -eq 0 ]]; then bg zle redisplay else zle push-input fi } zle -N fancy-ctrl-z bindkey '^Z' fancy-ctrl-z 

Я не знаю, как сделать что-то подобное в bash.

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

В bash просто введите Alt + # .

Затем, когда вы будете готовы, нажмите « Вверх», затем « Alt +».

Первая помещает # в начале строки, чтобы превратить ее в комментарий, затем принимает строку, как если бы вы нажали Enter .

Затем, когда вы делаете это во второй раз, он видит, что строка уже имеет # в начале, поэтому она удаляет ее и принимает ее, снова сохраняя ключ Enter .

Если второй раз просто вставляет другой # , вам нужно вместо этого набрать Alt + - Alt + # .

Вы можете сделать zsh так же, поставив

 bindkey -M emacs '\e#' pound-insert 

в вашем ~ / .zshrc.

Или, если вы используете привязки vi, вы можете ввести # из командного режима как в bash, так и в zsh.

Одна из моих любимых функций в zsh – встроенная функция push-line, которая позаботится об этом без каких-либо хакеров в других ответах здесь. Я привязал его к Ctrl + l в моем файле .zshrc следующим образом:

 bindkey '^L' push-line 

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

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

В дополнение к ctrlctrlk трюк, если вы находитесь на экране, просто ctrla d, чтобы отсоединить, затем снова подключиться с помощью screen -r

Вы также можете просто открыть другое окно с помощью ctrl + a c

Альтернативный способ, но не идеальный, нажмите Ctrl-X Ctrl-E . Это откроет ваш редактор по умолчанию, содержащий вашу половину типизированной команды. Затем вы можете сохранить свою команду в файл или открыть новую оболочку из своего редактора. Когда вы выйдете из новой оболочки, она вернет вас в редактор, и сохранение содержимого автоматически их выполнит.

Это не идеально, потому что оно не возвращает вас к исходной оболочке, но либо заставляет выполнение команды, либо полностью ее отбрасывает. Но нет временных выборок или буферов для убийств, о которых нужно беспокоиться, а также есть некоторые приятные твики, например, если editor = vi

 :wq # execute the command :cq # cancel and abort :! command # execute command :shell # open a new shell :r filename # insert the contents of a file for editing :r ! command # insert the output of a command for editing 

Используя zsh, если вы наберете <ESC> q (побег, затем Q), ваша строка подсказки будет вырезана, чтобы вы могли ввести другую команду. В следующем приглашении вы автоматически вернете текст вырезания.

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

Это не самый эффективный способ, если вам нужно использовать несколько команд для проверки / подготовки (вам придется перепечатать <ESC> q перед каждой командой). Но я думаю, что его можно привязать к более короткому ярлыку.


Если вы просто хотите проверить руководство, введите <ESC> h (побег, затем H). Это приведет к run-help встроенной run-help , с первым словом командной строки в качестве аргумента. После этого вы вернетесь к своей линии.

Подобно методу добавления # в начале строки, есть, возможно, более простой метод, который я использую, который не требует возврата к началу строки:

Просто добавьте открытую цитату и не закрывайте ее, будь то одиночный или двойной.

Затем нажмите Enter .

Затем нажмите Ctrl C.

Частичная команда сохраняется в истории команд (доступна с помощью стрелки вверх), но фактически не выполняется.

  • Запуск одной команды за другой в zsh при нажатии Ctrl-C
  • Объединение расширения параметров с модификаторами в zsh
  • Как использовать замещение параметров в шаблоне glob (zsh)
  • Остановить ZSH от попытки исправления команды
  • получить приглашение оболочки в python
  • Завершение первого аргумента cd OLD NEW
  • Поиск по поиску рыбы в ZSH
  • Отменить параметр, используемый в команде aliased?
  • Связь между исполняемым скриптом zsh и конфигурацией compsys / zstyle
  • Как автоматизировать исходную команду
  • Стандартное завершение Zsh отлично работает, так почему люди рекомендуют загружать модуль compinit?
  • Interesting Posts

    Как проверить, использует ли мое беспроводное соединение AES или TKIP с терминала?

    Установка старого кириллического раздела HFS в современном Linux

    Выходной текущий день с использованием cal

    где $ PATH получает свои значения из (osx)?

    idevicerestore не компилируется на Ubuntu 15.04

    Как добавить новые элементы в PATH для демонов (или других лучших практик)?

    Процесс firefox умирает после выхода ssh на удаленную машину

    Можете ли вы перемонтировать / tmp-раздел на exec во время работы?

    Как настроить автономный просмотрщик карт для openstreetmaps на debian?

    Использование именованных каналов в Bash, созданных в программе C

    Как вы можете группировать символические ссылки с каталогами в выводе `ls`, но сказать разницу?

    Не удается подключиться к маршрутизатору Belkin через linux mint

    Как сообщить Firefox пропустить соединения, идущие на определенный адрес?

    Невозможно перечислить каталог изнутри, только извне

    Разбиение файла на каждые 10000 номеров (не строк)

    Linux и Unix - лучшая ОС в мире.