В vim регистр всех символов в текстовом файле с помощью одной команды - PullRequest
0 голосов
/ 17 апреля 2020

В Vim мне нужно преобразовать все строчные буквы в прописные и все прописные в строчные с помощью одной команды. Поэтому, если мой текстовый файл выглядит следующим образом ..

Hello World

.. его нужно переключить, чтобы он выглядел следующим образом ..

hELLO wORLD

Я знаю, :%s/[a-z]/\U&/g изменит все строчные буквы в верхний регистр, и :%s/[A-Z]/\L&/g изменит все прописные на строчные. Но как мне написать это, чтобы сделать оба одновременно?

Кроме того, я знаю, если мой курсор находится вверху файла, VG~ переключит регистр всего, но это не тот ответ, который мне нужен. Спасибо.

Ответы [ 4 ]

3 голосов
/ 17 апреля 2020

Похоже, вы уже знаете все, что вам нужно. ggVG~ отмечает весь ваш код и переключает регистр. Если вам нужна одна команда, вы можете использовать:

:nnoremap <keybinding> ggVG~

или использовать эту функцию, которая делает то же самое, но сохраняет текущую позицию в файле:

function ToggleCase()
    exec "normal! mqHmw"
    exec "normal! ggVG~"
    exec "normal! 'wzt`q"
endfunction
command ToggleCase silent call ToggleCase()

первая и последний exec помечает вашу позицию в файле и восстанавливает их после переключения регистра. См: :h marks

введите :ToggleCase, чтобы использовать функцию. Конечно, вы можете связать это и с привязкой клавиш.

:nnoremap <keybinding> :ToggleCase<cr>
3 голосов
/ 17 апреля 2020
<Esc>1GVG~

Объяснение:

<Esc> — return to Normal mode; just in case we're in Insert mode or Command line
1G — jump to the 1st line
V — start Visual mode
G — jump to the last line extending selection
~ — toggle case in the selection

Или

<Esc>1Gg~G

g~<motion> — change case during motion; the motion is G (jump to last line)

Документы: http://vimdoc.sourceforge.net/htmldoc/change.html# ~

2 голосов
/ 18 апреля 2020

Поскольку вы упомянули об использовании single команды и упомянули несколько :%s/.../ замен, я предложу такую:

:%normal! g~~

Это запустит g~~ команда для переключения регистра одной строки для каждой строки буфера.

0 голосов
/ 18 апреля 2020

Еще один способ сделать это sh, если вы согласны принять плагин, это использовать плагин kana / vim-textobj-whole для текстового объекта для весь буфер.

Как говорит файл README.md плагина:

Хотя это тривиальные операции (например, ggVG), версии текстовых объектов более удобны, потому что вы не нужно учитывать положение курсора (например, vae).

С этим установленным и включенным плагином вы можете переключать регистр всего буфера с помощью:

g~ae
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...