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

Я пытаюсь сделать так, чтобы vim автоматически "заканчивал" две строки ниже при вводе "class", поэтому я написал следующее в .vimrc :

:imap class class<CR><CR>end

Так что это работало нормально, за исключением того момента, когда я начинаю вводить "класс", vim заканчивает вводить каждую букву "класса" до тех пор, пока я не закончу печатать, или то, что я набираю, больше не соответствует "классу".

Есть ли способ избежать этого поведения, я хочу иметь возможность видеть то, что я печатаю, так как я печатаю это, даже когда оно соответствует назначенной последовательности клавиш?

Не уверен, правильно ли я это объясняю.

Спасибо за помощь

1 ответ1

1

Ты ищешь

:inoreab class class<cr><cr>end

То же самое (nore) работало бы и с отображениями, но сопоставления менее приспособлены для таких фрагментов.

Кстати, аббревиатура должна быть объявлена специально для типа файла, где вы будете ее использовать (Ruby?) ->

" in ~/.vim/ftplugin/ruby/my_snippets.vim
:inoreab <buffer> class class<cr><cr>end

Обратите внимание, что вы не сможете набрать "класс" из строки или комментария, не увидев его развернутым. Вам придется либо полагаться на функции, которые позаботятся о контексте, либо на фрагменты (которые будут намного проще поддерживать)

Например, с помощью lh-кронштейна вы можете определить:

:Inoreab <buffer> class <c-r>=InsertSeq('class', 'class !cursorhere!\<cr\>!mark!\<cr\>end!mark!')<cr>

Но я действительно рекомендую вам использовать движок сниппета (mu-template, utilsnip, snipmate, ... Есть много)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .