Останній параметр останньої команди в bash у vi-mode


19

Я був переконаний (більше в Stack Overflow) використовувати мій улюблений баш у режимі vi. Поки я досить добре звик до цього і мені це подобається.

Однак я дійсно пропускаю одну особливість: У режимі emacs ви можете ввести останній параметр попередньої команди, натиснувши "ESC". (Тобто натисніть клавішу втечі, за якою слід.)

Чи є прив'язка за замовчуванням для вставки останнього параметра у режимі vi? Я не зміг її знайти, і мені дуже не вистачає цієї команди ...

Відповіді:


9

За замовчуванням немає Прив'язка для 'yank-last-arg' (як перераховано 'bind -p') зникає при переході у режим vi.

bind '"\e."':yank-last-arg

дасть вам ту саму прив’язку назад (або виберіть щось інше)


1
клон на zshbindkey "\e." insert-last-word
jhvaras

Я мав це роками на zsh, і кожен раз, коли мене змушують використовувати bash (наприклад, на сервері на роботі), я постійно забуваю, що ніколи не придумав, як його налаштувати на bash. Не більше! Це в поєднанні з history-search-backwardsбезцінним для серйозних користувачів командного рядка.
Шрідхар Сарнобат

11

Там (vi-yank-arg) за замовчуванням відображено "_". Це повинно робити те, що ви хочете (в командному режимі).


+1. Я не впевнений, чому ця відповідь не була прийнята.
Сатьям

7

Не зовсім те саме, але в будь-якому режимі ви можете набрати !$, і його буде замінено останнім словом попередньої команди. Знайдіть більше таких речей в посібнику .


Досить близько, щоб отримати надбавку, але не зовсім те саме ... Я пропускаю можливість редагувати рядок перед його виконанням. Але дякую все одно!
Пн

5

Файл ~ / .inputrc може налаштувати карту ключів (Ви можете створити її вручну, якщо її неможливо знайти). Додайте таку команду до ~ / .inputrc :

"\e.": yank-last-arg
"\e_": yank-last-arg

Мій ~ / .inputrc:

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on

set editing-mode vi
set keymap vi-insert

"\C-p": previous-history
"\C-n": next-history
"\C-a.":beginning-of-line
"\C-e.":end-of-line

"\e.": yank-last-arg
"\e_": yank-last-arg

Ви можете знайти подробиці про readline та bind -pтут: http://linux.about.com/library/cmd/blcmdl3_readline.htm

І трохи інформації про підключення клавіатур Vi в базі та чіт-листів режиму редагування VI


3

Всередині .bashrc додайте наступні:

set -o vi
bind -m vi-command ".":insert-last-argument
bind -m vi-insert "\C-l.":clear-screen
bind -m vi-insert "\C-a.":beginning-of-line
bind -m vi-insert "\C-e.":end-of-line
bind -m vi-insert "\C-w.":backward-kill-word

Вони відновлять поведінку за замовчуванням не лише ESC-крапки - але і Ctrl-A, Ctrl-E, Ctrl-W і Ctrl-L. Таким чином, ви можете насолоджуватися звичайним баш-vi-режимом і все одно використовувати ярлики, які ви знаєте і любите. Якщо вам потрібно більше дій, просто встановіть прапорець "man bash", щоб знайти назву потрібної дії для читання (наприклад, "чіткий екран", "кінець рядка" тощо).


0

Ви можете використовувати $_для позначення останнього аргументу попередньої команди.

Недоліками є:

  1. Ви не можете перевірити, перш ніж натиснути Enter, що вставлена ​​річ - це те, що ви мали намір вставити.

  2. Якщо ви використовуєте PROMPT_COMMAND або DEBUG-пастку (я не впевнений, що саме спричиняє проблему; у мене є обидва в моєму .bashrc), щоб робити модні речі, такі як введення запущеної команди у назву xterm, вона буде халатувати $_.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.