6

Предположим, у меня есть следующее в моем терминале:

> cp my_file_name originals/#

Где # представляет курсор.

Существует ли комбинация клавиш для вставки my_file_name в позицию курсора, чтобы мне не приходилось вводить ее снова? Я в курсе ALT+. чтобы получить последний аргумент из предыдущей команды, но я хочу предыдущий аргумент из текущей команды!

7 ответов7

11

Вы можете использовать Ctrl+W, чтобы вырезать аргумент и сохранить его в буфере обмена, а затем Ctrl+Y, чтобы вставить его снова:

cp my_file_nameCtrl+W Ctrl+Y originals/Ctrl+Y
9

Одним из способов сделать это является использование расширения скобки:

cp {,originals/}my_file_name
5

Сложное использование, но более простая установка:

Вы можете привязать нажатие клавиши (я буду использовать Ctrl- Q) к функции readline copy-backward-word readline и сделать это:

Alt - 2 Ctrl - Q Ctrl - y Ctrl - Alt - h

Это означает:

  • digit-argument copy-backward-word (скопировать два предыдущих слова)
  • yank (паста)
  • backward-kill-word (избавиться от лишнего слова)

Чтобы связать нажатие клавиш в командной строке:

bind '"\C-q": copy-backward-word'

или добавьте это в ваш ~/.inputrc:

"\C-q": copy-backward-word

Более простое использование, но более сложная настройка:

Вы можете превратить эту длинную последовательность нажатий клавиш в макрос, запускаемый одним нажатием клавиши (здесь я буду использовать Alt- q и использовать привязку Ctrl- q сверху):

По приглашению оболочки:

bind '"\eq": "\e2\C-q\C-y\e\C-h"'

или в вашем ~/.inputrc:

"\eq": "\e2\C-q\C-y\e\C-h"

Помните, что вам также нужно связать Ctrl - q, как указано выше.

Теперь, чтобы скопировать слово перед текущим, вам нужно всего лишь нажать Alt - q.

1

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

> F=my_file_name && cp $F Workspace/$F

Это может быть расширено также, чтобы переименовать файл:

> F=my_file_name && cp $F Workspace/$F.new
1

Сделай это так:

    cp my_file_name originals/!#:1

!# - текущая строка, 1 - первый аргумент.

0

У меня есть это в моем ~/.inputrc:

"\ej":"!#:$\e^"

!# - текущая строка :$ - последнее слово, а \e^ - history-expand-line .

0

Вы можете попробовать это:

cp my_file_name Ctrl+W Ctrl+Y originals/ Ctrl+Y

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

Редактировать: Попробуйте Alt+B, Ctrl+W, Ctrl+Y, End, Ctrl+Y - хотя и немного грязное решение!

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