Как скопировать командную строку в режиме 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
или тому подобное, аналогичным образом.