首页 > 解决方案 > 有没有办法获得可视块选择的最右侧列?

问题描述

假设virtualedit=. 考虑以下文本文件。

1 2 1 1 1 1 1 1
1 3 1 1 1 1 1 1
1 4 1 1 1 1 1 1 1 1
1 1 1 1 7 1 1 1

如果我视觉块选择第 2 到 4 行并使用$使选择非矩形,则以下代码将无法找到选择中最右边的列。更明确地说,我使用键序列2G^vjj$,其中^v是 Control-V。

" rightmostCol becomes 15, not 19 as desired.
let rightmostCol = virtcol("'>")

是否有一些我可以调用的其他函数,或者我可以传递给的表达式virtcol,以编程方式获取我的可视块选择中最右边列的列号?

请注意,简单地找出视觉块中最长线的长度是不正确的,因为视觉选择也可能是矩形的,这些情况不应以同样的方式处理。

编辑:如果可以确定视觉块选择是否为矩形,那也可以。

标签: vim

解决方案


你可以写一个 VimScript 函数:

function! GetRightmostCol()
   let start=line("'<")
   let end=line("'>")
   let line=start
   let len=len(getline(line))
   while line<=end
      let len=len<len(getline(line))?len(getline(line)):len
      let line+=1
   endwhile
   return len
endfunction

另一种方法是使用寄存器 0:

function! GetRightmostCol()
   let lines=split(getreg(0),"\n")
   let len=0
   for line in lines
      let len=len<len(line)?len(line):len
      let line+=1
   endfor
   return len
endfunction

然后在作业中使用函数:

:let rightmostCol = GetRightmostCol()

推荐阅读