LINUX.ORG.RU

vim и настройка поведения + кастом сниппеты

 , ,


0

2

Всем добра!

Хочу спросить советов у бывалых вимеров - благо их тут есть.

Сейчас работаю с фреймворком на js (точнее, на angular, то есть typescript) - Ionic. Соответственно, это html+css+js. Перетыкал много редакторов, из-за возможностей и особенностей пока был вынужден остановиться на webstorm - просто потому, что его поведение соответствует моим ожиданиям. Но хочу таки сменить редактор на vim, как основной. Проблема в том, что плагинов к ionic у vim нет, только подсветка синтаксиса. Попробую составить список тех моментов, которые мне нужны, буду очень признателен, если кто-то даст советы по их решению.

Сразу скажу - режим эмуляции vim для webstorm не предлагать. Редакторы atom, vs code, sublime text - тоже не предлагать - их поведение во многом больше мешает, чем помогает.

  • превращение текста по нажатию tab в тэги в html; в ionic много своих тэгов - таких как ion-button, ion-list, ion-item - большинство редакторов не умеют так, только webstorm ведёт себя прогнозируемо - превращает в тэг, согласно своим настройкам, а если такого тэга в его базе сниппетов нет - просто превращает введённый текст в тэг, с соответствующим закрывающим;
  • вставка ответных скобок, кавычек и т.д. - ремап в конфиге может приводить к некоторым проблемам, когда тебе, например, нужно просто поставить 1 скобку или кавычку; в общем, не совсем очевидно;
  • работа с git - хочу коммитить прямо из редактора максимально простым способом - webstorm, например, делает коммит по cmd+k;
  • легко и просто заворачивать выделенный текст во внешний тэг (вроде фича emmet) - причём и в html, и в css (точнее, scss, поскольку ionic завязан на нём и это очень удобно)
  • навигация в режиме вставки - СТРЕЛОЧКИ НЕ ПРЕДЛАГАТЬ!
  • как научить YouCompleteMe в русские символы в пути к файлу?
  • можно ли научить vim в подхват имен классов между html и css/scss? создал правило для класса mysuperclass в scss, а в html добавляешь class=«my» и оно тебе предлагает дополнить до mysuperclass; и наоборот - если в scss нету такого класса - при начале ввода предлагать его вставить; благо контролировать на этот счёт надо всего 2 файла: variables.scss и локальные html/scss, которые находятся попарно в соответствующих каталогах (короче, ищем такое же имя файла в этом же каталоге, только с расширением html вместо scss и наоборот)
  • быстро переформатировать весь документ в соответствии с установками (выравнивание тэгов и так далее)
  • поддержка синтаксиса в двойных фигурных скобках - так вызываются функции и методы и в angular и в vue.js
  • предпросмотр цветов, с возможностью добавить способ определения цвета - в ionic создаются переменные цветов, которые вызываются потом в scss как
    color: color($colors, colorname)
    - тут пасуют все редакторы, которыми я пользовался; если подсветить обычный hex или rgba они могут, то в этом случае бессильны.
  • ну и конечно работа с самим js в лице ts и angular - что тут может предложить vim?

Я так и не понял, как мне добавить свои сниппеты в ultisnips. Вот я хочу чтоб сниппеты из плагинов оставались, а просто добавить своё расширяющее правило - тот же ion-button, например, для html.

Ну и вообще - можно ли использовать для веба vim полноценно и не страдать?

★★★★

навигация в режиме вставки - СТРЕЛОЧКИ НЕ ПРЕДЛАГАТЬ!

С зажатым Alt'ом подойдет?
Только вот такое: ^[k нужно набирать так: Ctrl+v Alt+k .
И еще я сделал перемещение вверх/вниз по визуальным строкам. Если не нравится, думаю, разберешься как поменять.

" Make up/down movement by visible line, not by physical line
imap <buffer> <silent> <Up>   <C-o>gk
imap <buffer> <silent> <Down> <C-o>gj
imap <buffer> <silent> ^[k    <C-o>gk
imap <buffer> <silent> ^[j    <C-o>gj
imap <buffer> <silent> ^[h    <C-o>h
imap <buffer> <silent> ^[l    <C-o>l
imap <buffer> <silent> <Home> <C-o>g<Home>
imap <buffer> <silent> <End>  <C-o>g<End>

Kroz ★★★★★ ()

У меня информация за до ~2015 года, когда я занимался вебом, так что-то может быть уже не так актуально, как было.

превращение текста по нажатию tab в тэги в html

mattn/emmet-vim

Plug 'mattn/emmet-vim', { 'for': ['html','xhtml','css','sass','scss','xml'] }
au FileType html,xml,css,sass,scss imap <expr>jk  emmet#expandAbbrIntelligent("\<tab>")

'jk' удобнее чем Tab.

вставка ответных скобок, кавычек и т.д.

Raimondi/delimitMate

Еще я пользовался: gregsexton/MatchTag, paradigm/TextObjectify, kana/vim-textobj-indent, kana/vim-textobj-user, если работаешь с кириллицей, то lyokha/vim-xkbswitch незаменим.

Для JS на тот момент лучшее было: https://github.com/ternjs/tern_for_vim

Bruce_Lee ★★ ()

навигация в режиме вставки - СТРЕЛОЧКИ НЕ ПРЕДЛАГАТЬ!

vim-rsi
пожалуй первое, что бы я включил в vim если бы взялся его переписывать. увы он перекрывает биндинг ctrl-e, но это терпимо.

ЗЫ остальное не читал. советую лишь забыть слова про бывалых (ясвидетель) и не ставить никаких плагинов покамест. у меня вот окромя цветотемы, vim-rsi и nerdcommenter постоянно почти ничего и не используется. под задачи есть парочка. снипеты надо брать так же - по мере необходимости.

mos ★★☆☆☆ ()