Ответ 1
SnippetsEmu - полезный плагин для фрагментов.
Недавно я начал использовать Vim в качестве текстового редактора, и в настоящее время я работаю над собственными настройками.
Я полагаю, что сопоставления клавиатуры могут делать почти что угодно, но на данный момент я использую их как своего рода набор фрагментов почти исключительно.
Итак, например, если я набираю def{TAB}
(:imap def{TAB} def ():<ESC>3ha
), он расширяется до:
def |(): # '|' represents the caret
Это работает так, как ожидалось, но я нахожу это раздражающим, когда Vim ждет полную команду, пока я набираю слово, содержащее "def", и я не заинтересован в его расширении.
После быстрого просмотра SnippetsEmu, это выглядит как лучший вариант и намного проще настроить, чем я думал.
Чтобы продолжить с предыдущего примера:
:Snippet def <{}>():
После определения вы можете расширить свой фрагмент, набрав def{TAB}
.
SnippetsEmu - полезный плагин для фрагментов.
Snipmate - как тексмат:) http://www.vim.org/scripts/script.php?script_id=2540
видео: http://vimeo.com/3535418
snippet def
""" ${1:docstring} """
def ${2:name}:
return ${3:value}
В качестве другого предложения (хотя и немного другого) с использованием встроенных функций 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) - это, конечно же, идеальное решение, но приятно знать об альтернативах (особенно когда они встроены).
Если SnippetsEmu слишком тяжел или амбициозен для того, что вам нужно (это было для меня), я написал плагин, который управляет фрагментами на основе типа файла. При наборе фрагмента у него даже есть вкладка!:)
Получите его здесь: snippets.vim
Как отмечено в MDCore, SnippetsEmu является популярным Vim script, который делает именно это и многое другое. Если вам нужно только расширение (без возврата назад), вы можете использовать стандартную команду :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.
Я только что установил UltiSnips. Theres хорошая статья, которая объясняет, почему вы можете выбрать UltiSnips: Почему UltiSnips?
Я не использовал ни один из других модулей-фрагментов; Я решил сделать погружение с тем, который казался полнофункциональным и мог бы приспособить меня, поскольку я получаю больше навыков Vim и хочу делать более сложные вещи.