在插入模式下检测插入符号是否在行尾

时间:2013-10-23 13:22:32

标签: vim

我在Tim Pope的vim-markdown插件上做了pull request。一切都有效,除此之外 有一个错误,一个缺少功能。这个问题是关于错误的。

但首先让我简要介绍一下拉取请求:

  • 它实现自动列表
  • 当用户在降价列表中时,请按<CR>,具体取决于插入符号在线的位置, 可能会添加新的列表项(如果插入符号在行的中间,则会拆分行)

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

来自这样的映射:

inoremap <silent> <F9>   <C-\><C-O>:call Foo()<CR>