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

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

Ответы [ 15 ]

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

surround.vim будет вашим самым простым ответом. Если вы действительно настроены против его использования, вот несколько примеров того, что вы можете сделать. Не обязательно самый эффективный, но именно поэтому был написан surround.vim.

  • Цитировать слово, используя одинарные кавычки
    ciw'Ctrl+r"'
    • ciw - Удалить слово, на котором находится курсор, и перейти в режим вставки.
    • ' - добавить первую цитату.
    • Ctrl+r" - вставить содержимое регистра ", он же последний раз / удалить.
    • ' - добавить заключительную цитату.

  • Укажите в кавычках слово, заключенное в одинарные кавычки
    di'hPl2x
    • di' - Удалить слово, заключенное в одинарные кавычки.
    • hP - переместить курсор влево на одно место (поверх открывающей цитаты) и поместить только что удаленный текст перед цитатой.
    • l - переместить курсор вправо на одно место (поверх открывающей кавычки).
    • 2x - Удалить две кавычки.

  • Заменить одинарные кавычки на двойные
    va':s/\%V'\%V/"/g
    • va' - Визуально выберите цитируемое слово и кавычки.
    • :s/ - Запустить замену.
    • \%V'\%V - сопоставлять только одинарные кавычки, которые находятся внутри визуально выбранного региона.
    • /"/g - Заменить их все двойными кавычками.
168 голосов
/ 30 октября 2011

Цитировать слово, используя одинарные кавычки

ciw'Ctrl+r"'

Мне было проще сделать это таким образом

ciw '' Esc P
25 голосов
/ 27 января 2010

В дополнение к другим командам все слова в строке будут заключены в двойные кавычки (согласно вашему комментарию)

:s/\(\S\+\)/"\1"/

или, если вы хотите уменьшить количество обратных слешей, вы можете поместить модификатор \v (очень магический) в начале шаблона

:s/\v(\S+)/"\1"/
25 голосов
/ 27 января 2010

Вот несколько карт, которые могут помочь:

:nnoremap <Leader>q" ciw""<Esc>P
:nnoremap <Leader>q' ciw''<Esc>P
:nnoremap <Leader>qd daW"=substitute(@@,"'\\\|\"","","g")<CR>P

Если вы не изменили переменную mapleader, активируйте отображение с помощью \q" \q' или \qd. Они добавляют двойные кавычки вокруг слова под курсором, одинарные кавычки вокруг слова под курсором, удаляют любые кавычки вокруг слова под курсором соответственно.

16 голосов
/ 08 декабря 2013

Для переноса в одинарные кавычки (например) ciw'<C-r>"'<esc> работает, но повтор не будет работать. Попробуйте:

ciw'<C-r><C-o>"'<esc>

Это помещает содержимое регистра по умолчанию "буквально". Теперь вы можете нажать . на любом слове, чтобы заключить его в кавычки. Чтобы узнать больше см. :h[elp] i_ctrl-r и больше о текстовых объектах на :h text-objects

Источник: http://vimcasts.org/episodes/pasting-from-insert-mode/

10 голосов
/ 16 января 2017

Макрос путь

  1. нажмите q и q для записи в регистр q (мы используем "q" в качестве ярлыка для запоминания "кавычек").

  2. нажмите shift + b переместить курсор к началу текущего слова

  3. нажмите i введите ' (одинарные кавычки)

  4. нажмите esc , затем нажмите e , чтобы перейти к концу слова

  5. нажмите a , затем снова нажмите ', чтобы заключить слово в кавычки.

  6. наконец нажмите q , чтобы записать его в регистр q.

Как это использовать:

  1. Переместить курсор на нужное слово.
  2. Нажмите @ q , чтобы заключить слово в кавычки.
  3. Нажмите @ @ , если хотите повторить его в другое слово.

Вы можете изменить step 4 на что угодно: {строка, слово, пока не найдете какой-либо символ и т. Д.}. Поместите его в vim variables и .vimrc, чтобы повторить ваше счастье.

5 голосов
/ 04 июня 2018

Для пользователей VSCodeVim вы можете сделать

vwS"

  • Вы можете заменить " на то, что хотите обернуть.
  • Вы можете заменить w любым другим оператором выбора
5 голосов
/ 27 января 2010

Я не знаю какой-либо встроенной команды vim для этого, но использование r"f'r" для переключения с «на» и r'f"r' для переключения с «на» работает, если вы стоите на первом »или«. Команда r' заменяет любой символ, находящийся под вашим курсором, на ', а f" перемещает вас вперед к следующему ".

4 голосов
/ 06 июня 2015

Добавление цитат

Я начал использовать эту быструю и грязную функцию в моем .vimrc:

vnoremap q <esc>:call QuickWrap("'")<cr>
vnoremap Q <esc>:call QuickWrap('"')<cr>

function! QuickWrap(wrapper)
  let l:w = a:wrapper
  let l:inside_or_around = (&selection == 'exclusive') ? ('i') : ('a')
  normal `>
  execute "normal " . inside_or_around . escape(w, '\')
  normal `<
  execute "normal i" . escape(w, '\')
  normal `<
endfunction

Итак, теперь я визуально выбираю все, что хочу (обычно через viw - визуально выбираю внутри слова ) в кавычках и нажимаю Q для двойных кавычек, или нажимаю q для одинарных кавычек.

Удаление кавычек

vnoremap s <esc>:call StripWrap()<cr>

function! StripWrap()
  normal `>x`<x
endfunction

Я использую vim-textobj-quotes , чтобы vim рассматривал кавычки как текстовые объекты. Это означает, что я могу сделать vaq (визуально выбрать вокруг кавычек . Это находит ближайшие кавычки и визуально выбирает их. (Это необязательно, вы можете просто сделать что-то вроде f"vww). Затем я нажимаю s до полоса кавычки из выделения.

Изменение котировок

ПОЦЕЛУЙ. Я удаляю кавычки , затем добавляю кавычки . Например, чтобы заменить одинарные кавычки на двойные, я бы выполнил следующие шаги: 1. удалить одинарные кавычки: vaqs, 2. добавить новые кавычки: vwQ.


2 голосов
/ 05 мая 2016

Вот несколько простых сопоставлений, которые можно использовать для цитирования и кавычки слова:

" 'quote' a word
nnoremap qw :silent! normal mpea'<Esc>bi'<Esc>`pl
" double "quote" a word
nnoremap qd :silent! normal mpea"<Esc>bi"<Esc>`pl
" remove quotes from a word
nnoremap wq :silent! normal mpeld bhd `ph<CR>
...