Останнє оновлення на моєму досвіді
Частина 0"+y$ddв наступному картографуванні - це дійсно те, про що слід ретельно продумати та адаптувати його під свій смак / робочий процес / досвід.
Наприклад, дуже часто я виявляю, що в буфері закінчується декілька рядків, де я хочу виконати лише той, на якому курсор; в цьому випадку я можу використовувати 0"+y$dd:%d<CR>замість 0"+y$dd.
І це лише один із можливих сценаріїв.
Остаточна відповідь для тих, хто подобається vim
- Встановіть
vimсвій EDITOR/ VISUAL, щоб редагувати командний рядок, ви будете використовувати його vimдля редагування.
- Покладіть
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>у свій ~/.vimrcфайл на карту Leaderd(яку ви рідко використовуєте під час редагування команди) до дії "видаліть поточний рядок до +реєстру без затримки EOL".
- Закінчивши редагування команди в
vimредакторі, натисніть EscapeLeaderd.
- Вставте буфер обміну в термінал (це залежить від терміналу).
Оригінальна відповідь
Мені часто потрібно робити те саме, і я роблю це наступним чином. (Я зазвичай використовую set -o viв bash, тому пункти 1 і 2 в наступному відрізняються, якщо ви використовуєте set -o emacs, за замовчуванням; на основі вашого запитання виглядає так, що точки 1 і 2 об'єднані в Ctrl+, xа потім Ctrl+ e, що важче набрати, imho .)
- натисніть, Escapeщоб перейти у звичайний режим,
- натисніть, vщоб увійти до редактора, щоб відредагувати команду,
- редагуйте команду так, як мені подобається,
(Тут ви ставите запитання.)
- вдарити Escape0"+y$dd:wq,
- Зауважте: 0"+y$не просто "+yy, оскільки останній також скопіював би новий рядок, і це призведе до виконання команди, вставивши її в командний рядок,
- вставити буфер обміну в командний рядок
- як це зробити, залежить від терміналу, який ви використовуєте, я думаю; Я натиснув Ctrl+ Alt+ vв
URxvt.
- перейти до затвердження / редагування вручну.
Зрозуміло, що це лише обхідне рішення, яке полягає в копіюванні відредагованої команди в буфер обміну до видалення всієї команди, щоб нічого не виконати після виходу з редактора; проте це найкраще, що я можу отримати для себе.
Оновлення
Як мій EDITOR(і VISUAL) дорівнює vim, коли я редагую команду, я редагую її vim.
У цьому відношенні я помітив, що названо буфер /tmp/bash-fc.random, де randomє 6-символьним буквено-цифровим випадковим рядком.
Це дає простір для багатьох можливостей, якщо ви використовуєте vimв якості редактора, так як ви можете визначити деяке відображення у вашому .vimrcдля виконання всієї послідовності Escape0"+y$dd:wq. Наприклад, одна команда, яку ви рідко використовуєте під час редагування командного рядка Leaderd; тому ви можете помістити наступний mapping у свій .vimrcфайл
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
так що крок 4 у наведеному вище рецепті стає
- хіт EscapeLeaderd
edit-and-execute-command.