Нужен скрипт / функция / команда для окружения текста другим текстом - PullRequest
5 голосов
/ 22 июня 2011

Я новичок в скриптах в Vim. Мне нужно написать сценарий, который окружает кусок текста с другим текстом. Например:

\surroundingtext{surrounded text}

(да, это для LaTeX). Я хочу либо выделить «окруженный текст» и выполнить команду, либо «заключить в текст» результат команды регулярного выражения.

Я думаю, вопрос в том, как поместить это в функцию?

Спасибо, Джереми

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Вот что я делаю:

vnoremap <buffer> <leader>sur "zc\surroundingtext{<C-R>z}<Esc>

Это создает отображение в визуальном режиме, в котором вы можете выбрать символьно-визуальный выбор (v) текста, который вы хотите окружить, введите \sur (при условии, что по умолчанию mapleader составляет \), и текст будет быть в окружении указанного вами текста.

  • "z указывает регистр 'z'
  • c говорит vim изменить визуально выделенный текст, поместив исходный текст в регистр 'z'
  • \surroundingtest это левая сторона
  • <C-R>z говорит Vim вставить регистр 'z'
  • } - правая сторона
  • <Esc> возвращает вас в обычный режим

Я также делаю еще один шаг и создаю сопоставления в обычном режиме и в режиме вставки:

nnoremap <buffer> <leader>sur i\surroundingtext{}<Esc>i
inoremap <buffer> <leader>sur \surroundingtext{}<Esc>i

Вы можете поместить эти сопоставления в файл ~/.vimrc, но они будут отображаться для каждого filetype.

Лучшим местом для них будет ваш файл ~/.vim/after/ftplugin/tex.vim, поэтому они отображаются только тогда, когда ваш filetype равен tex. Создайте родительские каталоги, если они еще не существуют.

Предполагается, что тип файла правильно установлен на tex, и у вас включены подключаемые модули типа файла:

filetype plugin on
1 голос
/ 22 июня 2011

Я задал очень похожий вопрос несколько недель назад. Как многократно добавлять текст с обеих сторон слова в vim? Есть хорошие отправные точки в ответах.

Я бы порекомендовал использовать визуальный отбор, поскольку вам нужно окружить произвольные куски текста вместо одного слова. Войдите в режим визуального выбора, нажав v, затем выберите текст, который вы хотите окружить. Затем запишите макрос с нужной модификацией, используя следующие нажатия клавиш:

qa        " record a macro in buffer a
x         " cut the selected text
i         " enter insert mode
prefix    " type the desired prefix
<esc>     " exit insert mode
p         " paste the cut text
a         " enter insert mode after the pasted text
postfix   " type the desired postfix
<esc>     " exit insert mode
q         " stop recording

Чтобы повторно использовать макрос, просто визуально выберите следующий блок, который вы хотите изменить, и нажмите @a.

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

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