加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在vim中删除ruby周围的块(do / end)

发布时间:2020-12-15 22:55:38 所属栏目:安全 来源:网络整理
导读:如何删除由 vim中的do / end分隔的环绕块 例如 (10..20).map do |i| CURSOR HERE (1..10).map do |j| p j endend 我想做一些像dsb(删除环绕块)和得到的东西 (1..10).map do |j| p j end 解决方法 也许你可以制作nnormap. 每个end / do对都在同一个缩进上,所
如何删除由 vim中的do / end分隔的环绕块

例如

(10..20).map do |i| <CURSOR HERE>
  (1..10).map do |j|
    p j
  end
end

我想做一些像dsb(删除环绕块)和得到的东西

(1..10).map do |j|
    p j
  end

解决方法

也许你可以制作nnormap.

每个end / do对都在同一个缩进上,所以首先你应该找到pair indent – 在这种情况下,下一行是同一个缩进(因为你的光标在do行中.)

所以你可以通过查找下一个缩进行来制作vimscript函数并删除它.

这是该功能的一个例子.你可以自定义你想要的东西 – 即设置缩进的静止线.

function! DeleteWithSameIndent(inc)
    " Get the cursor current position
    let currentPos = getpos('.')
    let currentLine = currentPos[1]
    let firstLine = currentPos[1]
    let matchIndent = 0
    d

    " Look for a line with the same indent level whithout going out of the buffer
    while !matchIndent && currentLine != line('$') + 1 && currentLine != -1
        let currentLine += a:inc
        let matchIndent = indent(currentLine) == indent('.')
    endwhile

    " If a line is found go to this line
    if (matchIndent)
        let currentPos[1] = currentLine
        call setpos('.',currentPos)
        d
    endif
endfunction

nnoremap di :call DeleteWithSameIndent(1)<CR>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读