2

在降价文件中创建列表时,我想在按下时插入一个新项目<CR>。我希望它适用于有序列表和无序列表。这意味着,在有序列表中,列表项编号将自动增加。另外,如果我按下<CR>没有内容的列表项,我想删除该项目并添加一个新行,基本上结束列表;这是当前的行为。

由于这个自动命令的StackOverflow 问题,我设法实现了一些我想要的功能:

autocmd Filetype markdown setlocal com=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,b:- | set formatoptions=tcroqln

但是该自动命令不适用于有序列表,并且在<CR>按下空白列表项时不会结束列表。

是否可以添加这两个功能?

4

3 回答 3

2

Bullets.vim 是一个插件,它比修改注释命令更容易。

https://github.com/dkarter/bullets.vim

您可以通过键入“-”来插入项目符号列表,以下行将自动插入项目符号。

您也可以通过键入“1.”插入编号列表,后续行将自动按顺序编号。

从自述文件:

Bullets.vim 是一个用于自动子弹列表的 Vim 插件。

用法

在 markdown 或文本文件中,使用 - 或 * 开始一个项目符号列表。按回车键转到下一行,将创建一个新的列表项。

于 2017-09-27T15:59:36.067 回答
0

要处理有序列表,您可以像处理-sigil 一样将它们视为注释,只需添加:setlocal com+=b:1.This won't auto-increment,但无论如何,我认为 Markdown 在呈现列表时会为您执行此操作。

没有用于结束列表的内置逻辑,但您只需按下<C-U>即可删除自动插入的评论。如果这对您来说还不够好,:imap <buffer> <CR> <CR>...映射可以检测到这种情况(通过在部件中调用的函数...),然后自动将其删除。

于 2013-10-06T18:17:18.667 回答
0

将以下内容放入~/.vim/after/ftplugin/markdown.vim

" list markers (*, -, 1.)
function! s:list_marker() abort
  let line = substitute(getline(line('.')), '^\s*', '', '')
  let marker = matchstr(line, '^\([*-]\|\d\+\.\)\s')
  if !empty(marker) && marker == line
    return "\<c-u>"
  endif
  if marker =~ '\d'
    let marker = marker + 1 . '. '
  endif
  return "\<cr>" . marker
endfunction
inoremap <expr><buffer> <cr> <sid>list_marker() 
nmap <buffer> o A<cr>
于 2021-02-23T23:00:32.733 回答