Как скопировать командную строку в режиме ex в буфер обмена?

Как скопировать командную строку в режиме ex в буфер обмена?

введите описание изображения здесь

2 ответа

Решение

Вы можете включить режим командной строки в полный буфер Vim с именем окна командной строки, нажав <C-f>или введите его напрямую через q:, Там вы можете дергать как обычно; например, через "+yy или же :yank +<CR>, (Это также отлично подходит для других сложных правок!)

Последняя командная строка находится в реестре :; :let @+ = @:<CR> скопирует это в буфер обмена.

Наименьший Vim-подобный подход будет выбирать с помощью мыши; в Linux текст затем находится в первичном выделении X; в Windows вы можете использовать Edit > Copy, чтобы поместить его в буфер обмена.

Перейдите к строке, которую нужно скопировать; находиться в командном режиме, а не в режиме ввода.

Создайте «макрос», скопировав строку в именованный буфер. мне нравится использоватьmдля макроса:

"m

Перенесите строку в буфер, который вы только что назвали:

yy

Теперь (все еще в командном режиме) вы можете "запустить" буфер как "макрос", используя стандартный@для обращения к именованному буферу:

Если вы запустите его и обнаружите ошибку, просто нажмитеu«отменить» и исправить строку

через короткое время может стать мышечной памятью.

~ Более подробный пример ~

Создайте некоторые данные, просто скопировав и вставив эти команды.

Не нужно их вводить:

      $ printf "
TRUE(1)                           TRUE(1)

N\bNA\bAM\bME\bE
  t\btr\bru\bue\be - return true value

S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
  t\btr\bru\bue\be
" > zap



$ cat <<'EOF' >> zap
This part could just all be typed manually
otherwise append the " before copying into buffer
:%!sed "s/.$(printf '\b')//g
EOF

Откройте файл. Скорее всего, это будет выглядеть довольно прикольно:

$ vi zap

Перейти в конец буфераG

Далее перейдите в режим ввода,oи введите свой «макрос» в пустую строку, точно так же, как если бы вы вводили его в командном режиме, включая двоеточие в начале, чтобы его было легче обнаружить.

:%!sed "s/.$(printf '\b')//g"

Мы уже добавили большую часть строк, чтобы избавить вас от хлопот. Добавьте закрывающую двойную кавычку в конце с помощью<shift+a>

Всегда нажимайте<esc>для выхода из режима ввода после завершения редактирования.

Скопируйте всю строку (с «Y» или «yy») в именованный буфер. Опять же, мы будем просто использовать имя «m» для макроса, чтобы его было легче запомнить.

Таким образом, вы можете иметь несколько «макросов» с разными буквенными названиями, но вам нужно их запомнить.

"myy

Когда вы будете готовы, используйте командный режим для запуска «макроса» через @ и имя буфера.

@m

Если все сделано правильно, текст должен мгновенно стать «необработанным».

Очевидно, это короткий «макрос», но он дает представление. Самое большое преимущество такого подхода в том, что это «правильно».exиviиспользование согласно POSIX, поэтому оно должно работать без vim.

Если вы хотите скопировать текст в буфер обмена на уровне ОС , просто перенаправьте его вxsel,xclip,pbcopyили тому подобное, аналогичным образом.

Другие вопросы по тегам