Последнее обновление на моем опыте
Часть 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 viin 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, где random6-символьная буквенно-цифровая случайная строка.
Это дает пространство множеству возможностей, если вы используете их в vimкачестве редактора, так как вы можете определить некоторое отображение в вашем .vimrcфайле для выполнения всей последовательности Escape0"+y$dd:wq. Например, одна команда , которую вы редко используют при редактировании командной строки Leaderd; поэтому вы можете поместить следующий mapпинг в ваш .vimrcфайл
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
так что шаг 4 в приведенном выше рецепте становится
- ударил EscapeLeaderd
edit-and-execute-command.