Есть ли дословный режим для команды vim map? - PullRequest
1 голос
/ 08 июля 2010

Я пытаюсь настроить некоторые полезные шаблоны кодирования в vim, например, я сопоставил

map `cl iclass <+CLASSNAME+><CR>{<CR><Esc>Iprotected:<CR><+PROTECTED MEMBERS+><CR><Esc>Ipublic:<CR><+PUBLIC INTERFACE+><CR>};<CR><++><CR><Esc>3kv<0v3k<2k

чтобы при вводе `cl в vim я получал

class <+CLASSNAME+>
{
protected:
    <+PROTECTED MEMBERS+>
public:
    <+PUBLIC INTERFACE+>
};
<++>

(чтобы я мог переходить между тегами <+ +> с помощью C-j). Это прекрасно работает, но я считаю, что приведенный выше пример довольно неясен. Есть ли способ ввести то, что я хочу, чтобы vim печатал в «режиме дословного ввода»? Поэтому я хотел бы написать что-то вроде

map `cl i{VERBATIMSTART}class <+CLASSNAME+>
{
protected:
    <+PROTECTED MEMBERS+>
public:
    <+PUBLIC INTERFACE+>
};
<++>{VERBATIMEND}

Спасибо Пол

Ответы [ 3 ]

4 голосов
/ 08 июля 2010

Как уже упоминал Хаби, одним из способов решения этой проблемы является плагин сниппета.

Другой способ - скопировать этот фрагмент кода в его собственный файл и настроить отображение для вставки этого файла подкурсор:

map `cl :r /path/to/code_snippet<CR>
4 голосов
/ 08 июля 2010

Я не знаю, существует ли такой "дословный" режим для отображений. Лично я бы использовал один из сниппетов-плагинов для этого. Смотрите www.vim.org и поиск для "сниппета". Я не пробовал все из них (только SnippetsMgr ;-)), но я предполагаю, что они удобнее для определения многострочных фрагментов.

Некоторые из доступных плагинов сниппетов на vim.org: snippets.vim, snippetsEmu, snipMate, SnippetsMgr и т. д.

1 голос
/ 08 июля 2010

Вид очевидного (и, вероятно, не то, что вы хотите):

map `cl iclass <+CLASSNAME+>
\<CR>{
\<CR>protected:
\<CR>    <+PROTECTED MEMBERS+>
\<CR>public:
\<CR>    <+PUBLIC INTERFACE+>
\<CR>};
\<CR><++>
\<CR>

\ в начале строки говорит о том, что строка является продолжением предыдущей. Но это довольно буквальное продолжение: оно не добавляет новые строки, поэтому их нужно добавлять вручную. Поскольку он использует режим вставки, операция также будет зависеть от текущего режима отступа. (Хотя можно попытаться обойти это с :set paste / :set nopaste.)

Я бы попытался поместить текст во временную переменную или зарегистрировать, а затем P поместить (или :put) его в буфер. Например. setreg() позволяет сказать, что содержимое регистра является строками, и, таким образом, P будет работать независимо от отступа.

В противном случае, глядя в :help line-continuation или :help variables Я не вижу способа, как можно указать многострочную строку или текст.

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