vim - 有没有办法获得可视块选择的最右侧列?
问题描述
假设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
,以编程方式获取我的可视块选择中最右边列的列号?
请注意,简单地找出视觉块中最长线的长度是不正确的,因为视觉选择也可能是矩形的,这些情况不应以同样的方式处理。
编辑:如果可以确定视觉块选择是否为矩形,那也可以。
解决方案
你可以写一个 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()
推荐阅读
- ios - 当我在 iPad 上运行时,应用程序的大小不会改变
- google-bigquery - 如何对 Bigquery 查询的结果进行分页
- apache-kafka - 去重 KStream-KStream 的中间结果加入 Kafka Streams
- webpack - 当 splitChunks.chunks 设置为 'all' 时,Webpack 包没有被执行
- c# - 在 Visual Studio 中使用 C# 脚本开发 Azure Function
- apache-spark - 使用窗口和分区提取值
- amazon-web-services - AWS Elemental MediaConvert MPEG-DASH:无法使用清单配置文件创建 mpd:“urn:mpeg:dash:profile:isoff-on-demand:2011”
- php - 使用 Mremi\UrlShortener 从对象获取 ShortUrl - laravel
- python - Conda 工作但无法创建虚拟环境
- express - 抓取goodreads时如何避免403响应?