Привязка Vim для переноса слова под курсором в двойных фигурных скобках - PullRequest
0 голосов
/ 14 сентября 2018

При работе с шаблонами Jinja и YAML для конфигурации Ansible я часто копирую + вставляю имя переменной (скажем, nginx_root), а затем мне нужно обернуть его в двойные фигурные скобки: {{ nginx_root }}. Это становится неудобно делать вручную, поэтому я хочу иметь возможность вводить привязку клавиш Vim, чтобы обернуть текущее слово под курсором в двойные фигурные скобки.

Используя плагин vim -round , я могу добавить нужные фигурные скобки к слову под курсором с помощью ysiw}lysiw{, но это намного больше нажатий клавиш, чем я бы предпочел. Я пробовал следующее связывание ключей Vim, но его вызов в обычном режиме не имеет никакого видимого эффекта вообще:

" Wrap text under cursor with double curly braces (e.g., for Jinja variables)
nnoremap <C-J> ysiw}lysiw{

Ergo, мои вопросы:

  1. Используя стандартную функциональность Vim, плагин vim-Surround и / или любую другую комбинацию инструментов, как можно связать клавишу, которая будет переносить текущее слово под курсором с пробелом? мягкие двойные фигурные скобки? например, nginx_root{{ nginx_root }}

  2. Есть ли способ добиться этого и в режиме вставки, когда курсор находится справа от слова? (nginx_root*, где * - позиция курсора)

  3. Как связать клавишу (желательно доступную как в обычном, так и в режиме вставки) для вставки {{ * }} в текущей позиции курсора, где * - позиция курсора после вставки? (Это облегчило бы ввод новых переменных Jinja по сравнению с работой с переменными copy + paste, как отмечено выше.)

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Исправление сопоставления

Ваше сопоставление не работает, потому что оно использует :noremap.Правильно избегать переназначения (через часть nore команды) в максимально возможной степени, но, поскольку вы вызываете там отображение ys Surround.vim, нет (простого) способа обойти это:

nmap <C-J> ysiw}lysiw{

Альтернатива surround.vim

Это двойное окружение неудобно и фактически не нужно, потому что плагин позволяет определять пользовательские замены в соответствии с :help surround-customizing.

.следующее определяет новую замену на d (для "double"; 100 = char2nr('d'));с его помощью вы можете добавить двойные кудри к слову через ysiwd:

let g:surround_100 = "{{ \r }}"

Чтобы определить отображение только для определенных типов файлов, замените g: на b:.Тогда я бы рекомендовал поместить это значение в ~/.vim/ftplugin/{filetype}_whatever.vim (или {filetype}/whatever.vim; ср. :help ftplugin-name) вместо определения лотов :autocmd FileType {filetype} ...;он чище и лучше масштабируется;требует, чтобы у вас было :filetype plugin on, однако.

Другие ваши вопросы

Плагинround.vim также предлагает режим вставки <C-g>s mapping.Я бы рекомендовал против отображений режима вставки для этих видов правок;это против модели на основе режима Vim, и там доступно только несколько (и неудобных комбинаций клавиш с Ctrl или Alt ).

Чтобы вставить шаблон,простое картирование сделает.Вы можете поместить курсор между добавленными курсорами с помощью специальных клавиш <Left>:

:nnoremap <C-g>d a{{  }}<Left><Left><Left>
:inoremap <C-g>d {{  }}<Left><Left><Left>
0 голосов
/ 14 сентября 2018

Чтобы выполнить команды нормального режима, попробуйте

nnoremap <C-J> :normal ysiw}lysiw{<CR>

Подробнее см. :help normal.

...