Я знаю, что могу использовать Upдля перебора предыдущих команд. Запуск последней команды просто включает Up+ Enter. Тем не менее, я думал о покупке клавиатуры Happy Hacking, поскольку я провожу много времени vim
.
Эта клавиатура не имеет клавиш со стрелками, и я знаю, как получить такое поведение, нажав Ctrl+ Rи начав повторять мою предыдущую команду.
Есть ли простой способ эмулировать Up+ Enterв терминале UNIX без клавиш со стрелками?
shell
keyboard-shortcuts
command-history
шест для отталкивания
источник
источник
Ответы:
С
csh
или любой оболочкой реализациейcsh
-как историей замещения (tcsh
,bash
,zsh
):Потом Enter.
Или в качестве альтернативы :
Потом Enter.
Или Ctrl+ P,Enter
Волшебное пространство
Также обратите внимание, что
!!
и!-1
не будет автоматически расширяться для вас, пока вы не выполните их (когда это может быть слишком поздно).При использовании
bash
, вы можете положитьbind Space:magic-space
в~/.bashrc
, то нажатие Spaceпосле команды будет автоматически развернуть их в линию, что позволяет проверить их перед выполнением. Это особенно полезно для расширения истории из команды, запущенной некоторое время назад, например,!echo
будет тянуть последнюю команду, начиная сecho
. С магическим пространством вы можете просмотреть команду до ее запуска.Это эквивалентно действию
bindkey ' ' magic-space
вtcsh
илиzsh
.источник
magic-space
это один сладкий вариант!histverify
опция,shopt
которая заставит readline выполнить расширение истории, но не выполнит команду при первом нажатии клавиши ввода. Который позволит вам оценить результат и решить, если это то, что вы хотите запустить.!!
- это использование его расширения на месте . Напримерsudo !!
.Большинство оболочек, которые имеют функцию редактирования командной строки, поддерживают привязки клавиш Emacs. (крошечное подмножество)
Кроме того, вы можете настроить свою оболочку на использование режима редактирования команд vi, добавив
set -o vi
в файл запуска оболочки (например,~/.bashrc
). Тогда, например, вы можете!!
). Клавиша минус -также работает как команда «двигаться вверх».!-12
).vi
командном режиме, так что вам нужно будет использоватьvi
команду редактирования (например, I, A, C, R, или один из их коллег строчных) на самом деле добавить в команду из истории.Так, например, EsckisudoSpaceEnterэквивалентно
sudo !!
.!-2:- !$
. (К сожалению, он не поддерживает именованные буферы.)источник
vi
трюк был отличным !!!delete
Ctl + U в ZshМой любимый CTRL+ Pто CTRL+O
Это работает по умолчанию, дополнительная настройка не требуется. ^ P позволит вам переключиться на последнюю команду, а ^ O позволит вам выполнить текущую строку
Обратите внимание, что CTRL+ Oможно использовать столько раз, сколько вы хотите
источник
^J
ls
илиpwd
ранее.Конечно! Так как вы привыкли к
vi
сочетаниям клавиш, почему бы не настроить свою оболочку для реагирования на них? Дляbash
, поместите это в свой~/.inputrc
:Запущенные экземпляры bash не будут перечитывать файл, поэтому выйдите из системы и вернитесь обратно.
zsh
даже обнаружит это для вас: если ни один из ваших сценариев запуска не заставляет режим редактирования так или иначе использоватьbindkey
и если$EDITOR
обнаруживается, что переменная окружения содержитvi
, то он автоматически активируетvi
привязки клавиш. Если вам нужно форсировать это, укажите это в вашем~/.zshrc
:После этого используйте, ESCкак обычно, для ввода в командной строке и kи jдля перемещения вверх и вниз.
ТАКЖЕ : Привязки оболочки по умолчанию в большинстве оболочек являются Emacs переплетов, так на самом деле Crtl-Pи Ctrl-Nуже должны работать без вас ничего менять.
источник
С любой POSIX оболочки , реализующей пользователя Переносимость вариант (включает в себя
ksh
,zsh
,bash
,yash
), вы можете также использоватьfc
команду:Смотрите пример:
Больше информации в разделе Выполнение ряда команд из исторического ответа Джонатана Леффлера.
источник
Для всех пользователей Mac iterm2:
Вы можете связать ⌘+ Rс
0x0C 0x10 0x0d
. Это очистит терминал и выполнит последнюю команду.источник
0x10 0x0d
(т.е. опустите0x0C
).Я считаю, что мне нужно часто повторять команды как суперпользователь, поэтому
повторяет предыдущую команду, как если бы я
sudo
сначала запомнил ввод текста .источник
ksh
Оболочка имеет псевдоним по умолчанию ,r
которая повторяет последнюю команду. Это связано сfc -s
:Интересно, что
bash
документация дляfc
встроенного (help fc
и также в самом руководстве) даже упоминает об этом, но это не псевдоним по умолчанию в этой оболочке:В
bash
, это также будет работать, даже если вы отключили расширение истории сset +H
.В
zsh
оболочке естьr
встроенная функция, которая задокументирована так же, какfc -e -
.fc
Утилита является стандартной утилитой POSIX .источник
С
csh
или любой оболочки реализациейcsh
-like историей замещения (tcsh
,bash
,zsh
), вы можете также использовать!<beginning of command>
для вызова последней команды , начиная с<beginning of command>
.например, если вы бежали
!ta
выполнитtail file.txt
источник
tl; dr
!!
просто добавляет последнюю команду к вашей текущей команде.<backtick>!!<backtick>
выполняет последнюю команду и добавляет результат к вашей текущей команде.На самом деле есть 2 варианта:
Позвольте мне показать вам 2 примера:
Пример 1
Как вы видите выше, я выполняю команду и, по сути, просто добавляю последнюю команду.
Еще один вариант
Пример 2
источник
vi `!!`
. Очень полезноКогда я использую хороший эмулятор xterm, например, putty, мой любимый способ продолжить - выбрать команду, включая перевод строки, скопировать ее в буфер обмена и затем щелкнуть правой кнопкой мыши, чтобы вставить ее. Это повторяет команду в один клик. Это также хорошо работает для последовательности команд, разделенных точками с запятой.
источник
Вы можете использовать
!n
для выполнения n-й команды в терминале. где 'n' - это номер строкиhistory
команды.источник
!?
до последней команды? Вы уверены, что не путаете это!!
(что уже было рассмотрено в других ответах)?Введите History и запишите номер перед командой, которую вы хотите выполнить и использовать
!number
Вы также можете использовать ! -1 (1 - последняя выполненная вами команда, замените ее на число, которое вы получите при выполнении снизу, оставив последнюю выполненную как 1)
источник
Есть несколько слоев, в которых вы можете запросить последнюю команду.
Линейный редактор
Редактор строк (где вы вводите свои команды) предоставляется непосредственно ksh, библиотекой readline в bash и библиотекой zle в zsh. Другие оболочки, такие как dash, могут не иметь библиотеки редактирования для понимания этих ключей (если они не скомпилированы с
--with-libedit
включенной опцией).Эта работа в ksh, bash, zsh:
Ctrl- P# Режим Emacs (предыдущий)
Ctrl- N# Режим Emacs (следующий)
ESC- k # Режим vi ESC для перехода в командный режим и k для перехода в верхнее положение
ESC- j # vi Режим ESC для перехода в командный режим и j для перехода в нижнее положение
история
Система истории, предоставляемая многими оболочками, позволяет расширить некоторые ярлыки:
команды
Есть несколько команд, которые могут получить команды истории.
Как довольно многословная команда (только для печати):
или более старая и, следовательно, обычно более переносимая
fc
команда (непосредственно повторяется):Или, может быть, проще
fc -s -1
, но zsh не принимает такую опцию для fc.Если вы хотите только напечатать команду, используйте:
fc -nl -1 -1
.Для редактирования значения
FCEDIT
в текстовом редакторе (напр Е.Д. Emacs, VI, и т.д.) и использовать FC непосредственно:fc -1
.источник