Автоматическая вставка текста на новой строке в vim - PullRequest
2 голосов
/ 30 марта 2010

Я редактирую файл LaTeX с помощью vim. Когда я нахожусь в окружении \begin{itemize}, есть ли способ сказать vim, чтобы он автоматически вставлял \item всякий раз, когда я открываю новую строку?

Ответы [ 6 ]

4 голосов
/ 31 марта 2010
function CR()
    if searchpair('\\begin{itemize}', '', '\\end{itemize}', '')
        return "\r\\item"
    endif
    return "\r"
endfunction
inoremap <expr><buffer> <CR> CR()

Поместите это в файл .vim/ftplugins/tex.vim (или в любой .vim в каталоге .vim/ftplugins/tex).

2 голосов
/ 30 марта 2010

Я бы порекомендовал http://vim -latex.sourceforge.net . Этот пакет определяет несколько карт, полезных для латекса. В частности для вставки \ элемента нажимаешь <ATL-I>

1 голос
/ 31 марта 2010

Я взломал предоставленный ZyX скрипт и придумал это. Добавлена ​​поддержка команд o и O. не требует LaTeX-VIM.

function AddItem()
  if searchpair('\\begin{itemize}', '', '\\end{itemize}', '')
    return "\\item "
  else
    return ""
  endif
endfunction

inoremap <expr><buffer> <CR> "\r".AddItem()
nnoremap <expr><buffer> o "o".AddItem()
nnoremap <expr><buffer> O "O".AddItem()
1 голос
/ 31 марта 2010

Я могу нажать Cntl-I, и он вставит его для меня в обычном режиме или в режиме вставки. Это то, что я положил в свой .vimrc:

:imap <C-i> \item 
:nmap <C-i> o\item 

Обратите внимание, что в конце \item.

есть пробел.
1 голос
/ 30 марта 2010

Я знаю о латексе, но думаю, что это хорошая идея для поиска в скриптах vim

используйте кнопку поиска влево вверх: D

например поиск по

латекс автозаполнение

0 голосов
/ 22 февраля 2017

Расширенная версия ответа от Samad Lotia и ZyX

Поместите это в ваш ~/.vim/after/ftplugin/tex.vim

function! AddItem()
  let [end_lnum, end_col] = searchpairpos('\\begin{', '', '\\end{', 'nW')
  if match(getline(end_lnum), '\(itemize\|enumerate\|description\)') != -1
    return "\\item "
  else
    return ""
  endif
endfunction
inoremap <expr><buffer> <CR> getline('.') =~ '\item $' 
  \ ? '<c-w><c-w>' 
  \ : (col(".") < col("$") ? '<CR>' : '<CR>'.AddItem() )
nnoremap <expr><buffer> o "o".AddItem()
nnoremap <expr><buffer> O "O".AddItem()

Улучшения

  • автоматическая вставка \item также происходит для сред enumerate и description
  • Автоматическая вставка \item происходит только в том случае, если окружающая среда является одной из трех (itemize/enumerate/description). Этого не происходит при следующих обстоятельствах
  \begin{itemize}
    \item
       \begin{minipage}
        <CURSOR>
       \end{minipage}
  \end{itemize}
  • автоматическая вставка \item происходит только в том случае, если вы находитесь в конце строки
  • удаление автоматически вставленного \item, нажав <CR> во второй раз. Если вы хотите добавить отступ в этом случае, измените '<c-w><c-w>' на '<c-w><c-w><c-t>'.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...