Сведения о вопросе

FUTER

20:35, 28th August, 2020

Теги

vim    

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

Просмотров: 421   Ответов: 7

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

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

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

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

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

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

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

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

:Snippet def <{}>():

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



  Сведения об ответе

SKY

21:06, 1st October, 2020

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}


  Сведения об ответе

DINO

03:07, 27th August, 2020

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

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

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

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

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

au filetype python :iabbrev ... etc

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


  Сведения об ответе

PHPH

15:41, 28th August, 2020

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

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


  Сведения об ответе

dump

05:34, 20th August, 2020

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


  Сведения об ответе

DO__IT

14:45, 4th August, 2020

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

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


  Сведения об ответе

прога

08:02, 27th August, 2020

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


  Сведения об ответе

ailfence

15:01, 19th September, 2024

 

у наш час дуже багато компаній, які займаються розробкою та продажем систем. 
Я б Вам рекомендував купити систему розумного будинку https://360view.com.ua/intelektualni-systemy/. 
Це надійна та перевірена компанія, тут врахують усі Ваші побажання та автоматизують усі необхідні для Вас функції.

Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться