0

我在Tim Pope的插件上提出了这个拉取请求。vim-markdown一切正常,除了有一个错误和一个缺失的功能。这个问题是关于错误的。

但首先让我简要描述一下拉取请求:

  • 它实现了自动列表
  • 当用户在降价列表中时,按下<CR>,取决于插入符号在行中的位置,可能会添加一个新的列表项(或者如果插入符号位于一行的中间,则该行将被拆分)

问题是我无法检测到插入符号何时位于行尾。如果插入符号位于最后两个字符之一上,我能得到的最接近的方法是添加一个新的列表项。问题是无论我做什么,当插入符号在插入模式下的最后一个字符之前或之后时,它会在正常模式下打开最后一个字符,所以我无法检测插入符号是在最后一个字符之前还是之后插入模式中的字符。

我尝试使用col('.'),col('$')等的不同组合len(getline('.')),但我尝试的一切都产生了相同的结果:在插入模式下的最后一个字符上时,我无法区分插入符号的前后位置。

那么如何在插入模式下检查插入符号是否在行的最后一个字符之后?

4

2 回答 2

1

如果您使用 退出插入模式<Esc>,则光标始终向左移动(除非在第 1 列),因此这应该是唯一必要的条件。我使用这个功能:

function! IsCursorAtEndOfNonEmptyLine()
    return col('.') == col('$') && col('.') != 1
endfunction

从这样的映射:

inoremap <silent> <F9>   <C-\><C-O>:call Foo()<CR>
于 2013-10-23T14:08:39.353 回答
0
function! IsCursorAtEndOfLine()
  if(col('$') ==# 1)
    return 1
  else
    return (col('$') - col('.')) ==# 1
  endif
endfunction
于 2016-12-03T03:39:45.820 回答