Как создать привязку клавиш в vim, которая позволяет пользователю вставлять, повторяет вставку?

#vim #latex #vi #keymapping

#vim #Латекс #vi #отображение клавиш

Вопрос:

Я хотел бы создать привязку клавиш, которая позволит пользователю вводить что-либо в режиме вставки, затем переходит к другой строке и помещает то, что пользователь ввел там. Цель этого для LaTeX begin и end . Это то, что у меня есть до сих пор:

 autocmd Filetype tex inoremap `d begin{}<CR><  ><CR>end{}<esc>2kf{a
  

В конце a позволяет пользователю вводить в begin поле, и я хочу сделать так, чтобы при выходе из режима вставки то, что я ввел, помещалось в end поле. Я, честно говоря, понятия не имею, как это сделать. Любая помощь приветствуется.

Комментарии:

1. Рассмотрите стек Vi и Vim для вопросов по Vim!

2. @filbranden Нет. Это по теме здесь.

Ответ №1:

Это довольно сложно сделать для одного сопоставления.

Если вы действительно хотите создать свой собственный, я думаю, что самый простой подход, который я могу предложить здесь, — это запросить у пользователя тип среды (с input() ), а затем использовать это имя дважды при вставке блока.

Это должно сработать:

 function! LatexEnvironment()
    let name = input('Environment name: ')
    return "\begin{".name."}r\end{".name."}<C-o>O"
endfunction
autocmd Filetype tex inoremap <expr> `d LatexEnvironment()
  

Гораздо лучшим подходом здесь является использование движка сниппетов.

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

Например, в UltiSnips вы можете использовать следующий фрагмент:

 snippet "\?b(egin)?" "begin{} / end{}" br
begin{${1:something}}
    ${0:${VISUAL}}
end{$1}
endsnippet
  

Который на самом деле является стандартным фрагментом, который вы можете найти в библиотеке honza / vim-snippets.

Ответ №2:

Остановите это безумие и используйте все это ниже:

Комментарии:

1. Отличный совет по использованию vimtex в файлах TeX LaTeX! Это один из лучших плагинов в Vim!