我正在使用vim编辑LaTeX文件。当我在\begin{itemize}
环境中时,有没有办法告诉vim在打开新行时自动插入\item
?
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/ftplugins/tex
目录内的.vim
文件):我黑客了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()
inoremap <expr><buffer> <CR> getline('.') =~ '\item $' ? '<c-w><c-w>' : '<CR>'.AddItem()
,如果您按两次<CR>,它会自动删除\item
。来自 https://github.com/lervag/vimtex/issues/455 - Hotschke我可以按下Ctrl-I,无论是在正常模式还是插入模式下,它都会为我输入。这是我放在我的.vimrc文件中的内容:
:imap <C-i> \item
:nmap <C-i> o\item
\item
的末尾有一个空格。将此放置在您的~/.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
itemize/enumerate/description
)时,才会自动插入\item
。在以下情况下不会发生 \begin{itemize}
\item
\begin{minipage}
<CURSOR>
\end{minipage}
\end{itemize}
\item
<CR>
来删除自动插入的\item
。如果想要在这种情况下添加一些缩进,请将'<c-w><c-w>'
更改为'<c-w><c-w><c-t>'
。
\item
,而不必依赖于alt-I? - Samad Lotia