Какие команды Vim можно использовать для кавычек / кавычек? - PullRequest
175 голосов
/ 27 января 2010

Как я могу быстро цитировать / заключать в кавычки слова и изменять цитирование (например, с ' на ") в Vim? Я знаю о плагине round.vim , но я бы хотел использовать только Vim.

Ответы [ 15 ]

1 голос
/ 29 декабря 2018

VIM для vscode делает это потрясающе. Он основан на vim -round , если вы не используете vscode.

Некоторые примеры:

«test» с курсором внутри кавычек типа cs «», заканчивающийся «test»

"тест" с курсором внутри кавычек типа ds ", чтобы закончить тестом

"test" с курсором внутри кавычек, наберите cs "t и введите 123>, чтобы завершить с <123> тестом

test с курсором на слове test type ysaw) для завершения (test)

1 голос
/ 21 декабря 2011

Я использую nnoremap в моем .vimrc

Чтобы указать в кавычках слово:

nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl

Чтобы удалить кавычки (также работает с двойными кавычками):

nnoremap qs :silent! normal mpeld bhd `ph<CR>

Правило помнить: 'sq' = одинарная кавычка.

0 голосов
/ 04 апреля 2019

Пример карты в визуальном режиме для добавления одинарных кавычек вокруг выделенного блока текста:

:vnoremap qq <Esc>`>a'<Esc>`<i'<Esc>
0 голосов
/ 25 января 2019

Я написал скрипт, который делает это:

function! WrapSelect (front)
    "puts characters around the selected text.
    let l:front = a:front
    if (a:front == '[')
        let l:back = ']'
    elseif (a:front == '(')
        let l:back = ')'
    elseif (a:front == '{')
        let l:back = '}'
    elseif (a:front == '<')
        let l:back = '>'
    elseif (a:front =~ " ")
        let l:split = split(a:front)
        let l:back = l:split[1]
        let l:front = l:split[0]
    else
        let l:back = a:front
    endif
    "execute: concat all these strings. '.' means "concat without spaces"
    "norm means "run in normal mode and also be able to use \<C-x> characters"
    "gv means "get the previous visual selection back up"
    "c means "cut visual selection and go to insert mode"
    "\<C-R> means "insert the contents of a register. in this case, the
    "default register"
    execute 'norm! gvc' . l:front. "\<C-R>\""  . l:back
endfunction
vnoremap <C-l> :<C-u>call WrapSelect(input('Wrapping? Give both (space separated) or just the first one: '))<cr>

Чтобы использовать, просто выделите что-нибудь, нажмите control l, а затем введите символ. Если это один из символов, о которых знает функция, он предоставит правильный завершающий символ. Если это не так, он будет использовать один и тот же символ для вставки с обеих сторон.

Surround.vim может сделать больше, чем просто это, но этого было достаточно для моих нужд.

0 голосов
/ 27 января 2010

как насчет этого?

 :%s/\'/"/g
...