Как создать короткие фрагменты в Vim?

Недавно я начал использовать Vim в качестве текстового редактора, и в настоящее время я работаю над своими настройками.

Я полагаю, что клавиатурные сопоставления могут делать что угодно, но в настоящее время я использую их в качестве своего рода объекта фрагментов почти исключительно.

Так, например, если я наберу def{TAB}( :imap def{TAB} def ():<ESC>3ha), он расширяется до:

def |(): # '|' represents the caret

Это работает, как и ожидалось, но меня раздражает, когда Vim ждет полной команды, когда я набираю слово, содержащее «def», и не заинтересован в его расширении.

  • Есть ли способ избежать этого или использовать эту функцию более эффективно для этой цели?
  • Любая другая функция Vim лучше подходит для этого?

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

Для продолжения предыдущего примера:

:Snippet def <{}>():

После определения вы можете расширить свой фрагмент, набрав def{TAB}.

28 vim
18.08.2008 22:41:10
Может быть, макросы лучше подойдут для коротких фрагментов?
mk. 18.08.2008 22:58:34
6 ОТВЕТОВ
РЕШЕНИЕ

SnippetsEmu - полезный плагин для сниппетов.

5
8.07.2015 20:49:19
Ваш ответ только для ссылок отправит меня к CouchDB. Вот почему ссылки только ответы ужасны. По общему признанию, Вы по крайней мере сформулировали ссылку, чтобы я мог по крайней мере искать Google. Вы должны изменить свою ссылку на официальную, как в OP / question.
James 12.03.2015 19:10:00

Как отметил MDCore, SnippetsEmu является популярным Vim скрипт , который делает именно это и многое другое. Если вам нужно только расширить (без перемещения каретки), вы можете использовать стандартную :ab[breviate]команду.

:ab[breviate] [<expr>] {lhs} {rhs}
        add abbreviation for {lhs} to {rhs}.  If {lhs} already
        existed it is replaced with the new {rhs}.  {rhs} may
        contain spaces.
        See |:map-<expr>| for the optional <expr> argument.
4
16.05.2017 00:04:29

Если SnippetsEmu слишком тяжелый или амбициозный для того, что вам нужно (это было для меня), я написал плагин, который управляет фрагментами на основе типа файла. Он даже завершает вкладку при выборе фрагмента! :)

Получите это здесь: snippets.vim

6
1.11.2008 08:21:41

Snipmate - как texmate :) http://www.vim.org/scripts/script.php?script_id=2540

видео: http://vimeo.com/3535418

snippet def 
     """ ${1:docstring} """
     def ${2:name}:
         return ${3:value}
35
25.04.2011 23:11:10
и XPTemplate, и UltiSnips являются улучшением по сравнению с snipMate
user1825480 10.12.2012 13:22:19
У Snipmate есть новейшая вилка на github.com/garbas/vim-snipmate и используется
caspyin 20.01.2013 04:36:47

Я только что установил UltiSnips . Есть хорошая статья, которая объясняет, почему вы можете выбрать UltiSnips: почему UltiSnips?

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

5
29.03.2012 06:12:46
Я пробовал и Snipmate, и UltiSnips, и, без сомнения, UltiSnips намного лучше, потому что проще вносить изменения и создавать фрагменты.
SergioAraujo 27.12.2013 09:03:40

Как еще одно предложение (хотя и немного другое) с использованием встроенной функциональности vim:

:iabbrev def def(): #<LEFT><LEFT><LEFT><LEFT><LEFT>

Теперь всякий раз, когда вы набираете def с последующим пробелом или другим несловарным символом, он расширяется до того же значения, которое вы указали в качестве результата SnippetsEmu (пробел берется из пробела, который вы ввели, чтобы вызвать завершение).

Этот подход не страдает от проблемы "задержки", с которой вы столкнулись при использовании: inoremap, и встроен в vim. Для получения дополнительной информации об этой функции, посмотрите на :help abbrev.

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

au filetype python :iabbrev ... etc

Snip [ets] (Manager | Emu | Mate | .vim), конечно, также является идеальным решением, но приятно знать об альтернативах (особенно когда они встроены).

11
30.10.2012 05:21:22