在vim的换行符处自动插入文本

时间:2010-03-30 18:43:39

标签: vim latex

我正在用vim编辑一个LaTeX文件。当我在\begin{itemize}环境中时,有没有办法告诉vim每当我打开一个新行时自动插入\item

6 个答案:

答案 0 :(得分:4)

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内。

答案 1 :(得分:2)

我会推荐http://vim-latex.sourceforge.net。该软件包定义了几个对乳胶有用的地图。 特别是对于插入\ item,请按<ATL-I>

答案 2 :(得分:1)

我对乳胶一无所知,但我认为在vim脚本中搜索是个好主意

use the search button up left :D

例如搜索

乳胶自动完成

答案 3 :(得分:1)

我可以点击Cntl-I,它会在正常模式或插入模式下为我提供。这就是我放在.vimrc中的内容:

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

请注意,\item末尾有一个空格。

答案 4 :(得分:1)

我攻击了ZyX提供的脚本并提出了这个问题。它增加了对oO命令的支持。 需要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()

答案 5 :(得分:0)

Samad Lotia和ZyX的答案扩展版

将其放在test_image

~/.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() 的自动插入也适用于环境\itemenumerate
  • description的自动插入仅在周围环境是三个(\item)之一时才会发生。在以下情况下不会发生这种情况
itemize/enumerate/description
  • \begin{itemize} \item \begin{minipage} <CURSOR> \end{minipage} \end{itemize} 的自动插入只有在您行的最后才会发生
  • 第二次按\item删除自动插入的\item。如果想要在这种情况下添加一些缩进,请将<CR>更改为'<c-w><c-w>'