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

发布于 2024-08-26 18:43:56 字数 112 浏览 7 评论 0原文

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

I am editing a LaTeX file with vim. When I am in the \begin{itemize} environment, is there any way to tell vim to autoinsert \item whenever I open a new line?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

女皇必胜 2024-09-02 18:43:57

我知道关于 Latex 的注意事项,但我认为在 vim 脚本中搜索是个好主意

使用左侧的搜索按钮 :D< /a>

例如搜索

乳胶自动完成

I know noting about latex but I think it is a good idea to search in vim scripts

use the search button up left :D

for example search for

latex auto completion

自我难过 2024-09-02 18:43:57

我可以按 Cntl-I,它会以正常模式或插入模式将其放入。这是我在 .vimrc 中放入的内容:

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

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

I can hit Cntl-I and it'll put it in for me in either normal mode or insert mode. This is what I put in my .vimrc:

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

Note that there is a space at the end of \item.

荒路情人 2024-09-02 18:43:57

我破解了 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()

I hacked the script ZyX supplied and came up with this. It adds support for the o and O commands. It does not require 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()
末骤雨初歇 2024-09-02 18:43:57

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 

Improvements

  • 自动插入 \item< /code> 也适用于环境 enumeratedescription
  • 自动插入 \item 仅当直接周围环境是以下三个环境之一时才会发生 ( 逐项/枚举/描述)。在以下情况下不会发生
  \begin{itemize}
    \item
       \begin{minipage}
        <CURSOR>
       \end{minipage}
  \end{itemize}
  • 自动插入 \item 仅当您在行尾
  • 通过按 < 删除自动插入的 \item 时才会发生第二次;CR>。如果想在这种情况下添加一些缩进,请将 '' 更改为 '' >。
\ ? '<c-w><c-w>' \ : (col(".") < col("$") ? '<CR>' : '<CR>'.AddItem() ) nnoremap <expr><buffer> o "o".AddItem() nnoremap <expr><buffer> O "O".AddItem()

Improvements

  • 自动插入 \item< /code> 也适用于环境 enumeratedescription
  • 自动插入 \item 仅当直接周围环境是以下三个环境之一时才会发生 ( 逐项/枚举/描述)。在以下情况下不会发生
  • 自动插入 \item 仅当您在行尾
  • 通过按 < 删除自动插入的 \item 时才会发生第二次;CR>。如果想在这种情况下添加一些缩进,请将 '' 更改为 '' >。

Extended Version of Answer by Samad Lotia and ZyX

Place this in your ~/.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 

Improvements

  • auto-insert of \item also happens for environments enumerate and description
  • auto-insert of \item only happens if the immediate surrounding environment is one of the three (itemize/enumerate/description). It does not happen in following circumstance
  \begin{itemize}
    \item
       \begin{minipage}
        <CURSOR>
       \end{minipage}
  \end{itemize}
  • auto-insert of \item only happens if you are at the end of the line
  • deletion of auto inserted \item by pressing <CR> a second time. If one wants to add some indention in this case, change '<c-w><c-w>' to '<c-w><c-w><c-t>'.
\ ? '<c-w><c-w>' \ : (col(".") < col("$") ? '<CR>' : '<CR>'.AddItem() ) nnoremap <expr><buffer> o "o".AddItem() nnoremap <expr><buffer> O "O".AddItem()

Improvements

  • auto-insert of \item also happens for environments enumerate and description
  • auto-insert of \item only happens if the immediate surrounding environment is one of the three (itemize/enumerate/description). It does not happen in following circumstance
  • auto-insert of \item only happens if you are at the end of the line
  • deletion of auto inserted \item by pressing <CR> a second time. If one wants to add some indention in this case, change '<c-w><c-w>' to '<c-w><c-w><c-t>'.
櫻之舞 2024-09-02 18:43:56
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)中。

function CR()
    if searchpair('\\begin{itemize}', '', '\\end{itemize}', '')
        return "\r\\item"
    endif
    return "\r"
endfunction
inoremap <expr><buffer> <CR> CR()

Put this into your .vim/ftplugins/tex.vim file (or any .vim inside .vim/ftplugins/tex directory).

轻许诺言 2024-09-02 18:43:56

我推荐 http://vim-latex.sourceforge.net。这个包定义了几个对 Latex 有用的贴图。
特别是要插入 \item,请按

I would recommend http://vim-latex.sourceforge.net. This package defines several maps useful for latex.
In particular for inserting \item you press <ATL-I>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文