Подтвердить что ты не робот

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

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

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

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

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

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

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

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

Чтобы продолжить с предыдущего примера:

:Snippet def <{}>():

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

4b9b3361

Ответ 1

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

Ответ 3

В качестве другого предложения (хотя и немного другого) с использованием встроенных функций 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) - это, конечно же, идеальное решение, но приятно знать об альтернативах (особенно когда они встроены).

Ответ 4

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

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

Ответ 5

Как отмечено в 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.

Ответ 6

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

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