В Bash я могу скопировать последний введенный аргумент позиции курсора?

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

> cp my_file_name originals/#

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

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

6
задан 09.04.2017, 10:46

5 ответов

Один способ сделать его использует расширение фигурной скобки:

cp {,originals/}my_file_name
9
ответ дан 07.12.2019, 15:25

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

cp my_file_nameCtrl+W Ctrl+Y originals/Ctrl+Y
12
ответ дан 07.12.2019, 15:25

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

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

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

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

  • 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.

5
ответ дан 07.12.2019, 15:25

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

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

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

> F=my_file_name && cp $F Workspace/$F.new
1
ответ дан 07.12.2019, 15:25

Вы могли попробовать это:

cp my_file_nameCtrl+WCtrl+Yoriginals/Ctrl+Y

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

Править: Попробуйте Alt+B, Ctrl+W, Ctrl+Y, Конец, Ctrl+Y — определенное грязное решение хотя!

0
ответ дан 07.12.2019, 15:25

Теги

Похожие вопросы