我有一个简单的vim脚本,可以将选定的文本块存储为列表。函数VtoList()
的问题在于它在光标返回到可视块开头之后才执行,而不是在此之前执行。因此,我无法获取可视块结束的行。
nn <F2> :call VtoList()<CR>
func! VtoList()
firstline = line('v') " Gets the line where the visual block begins
lastline = line('.') " Gets the current line, but not the one I want.
mylist = getline(firstline, lastline)
echo mylist
endfunc
问题出在
line('.')
上。它应该返回光标所在行的位置,但在调用函数之前,光标已经返回到了可视块的开头。因此,我只得到了单个行而不是一系列行。我提供了一个解决方案,每次用户按下V键时设置一个标记,并在调用函数之前设置另一个标记。
nnoremap V mV
nnoremap <F2> mZ:call VtoList()<CR>
如果我使用line("'V")
和line("'Z")
替换line('v')
和line('.')
,该函数可以正常工作,但如果可能的话,我想避免使用这种解决方案,因为它可能会与用户的映射冲突。
在光标返回可视块的开头之前,在函数中有没有一种方法可以获取当前可视块的当前行?