热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

将括号括起的文本向左或向右移动

如何解决《将括号括起的文本向左或向右移动》经验,为你挑选了1个好方法。

有没有人知道一个vim脚本/帮助器/命令,它可以让你在一行内左右移动一个被括号括起来的文本?

例如,我有这个带有和弦注释的文本,我希望有一个快捷方式,我可以在括号内移动和弦,例如

Some lyrics and te[Am]xt line
                   ^
Some lyrics and t[Am]ext line
                  ^

这将向左移动一步.

我确信这是可能的(我猜几乎一切都可能与vim),但我不知道如何,到目前为止还没有找到任何东西.



1> user852573..:

我不确定这是你想要的,但你可以尝试以下代码:

nno  [h  :call move_chords(0, v:count1)
nno  ]h  :call move_chords(1, v:count1)

fu! s:move_chords(fwd, cnt) abort
    let pos  = virtcol('.')
    let pat1 = '\[?\k{-}%#&(\[\k*\])('.repeat('.', a:cnt).')'
    let pat2 = repeat('.', a:cnt).'\[?\k{-}%#&('.repeat('.', a:cnt).')(\[\k*\])'
    exe 'keepj keepp s/\v'.(a:fwd ? pat1 : pat2).'/\2\1/e'
    exe &modified ? 'norm! '.(pos+(a:fwd ? a:cnt : -a:cnt)).'|' : ''
endfu

它应该使用键序列安装2个映射,[h并将]h方括号内的文本移动到当前光标位置左侧或右侧.它应该接受计数,如果你想将文本移动得比单个字符更远:

在此输入图像描述

如果你使用vim-repeat插件,那么你可以使用dot命令代替重复相同的映射:

在此输入图像描述

...使用以前代码的修改版本:

nmap  [h                    (move_chords_backward)
nmap  ]h                    (move_chords_forward)
nno (move_chords_backward)    :call move_chords(0, v:count1)
nno (move_chords_forward)     :call move_chords(1, v:count1)

fu! s:move_chords(fwd, cnt) abort
    let pos  = virtcol('.')
    let pat1 = '\[?\k{-}%#&(\[\k*\])('.repeat('.', a:cnt).')'
    let pat2 = repeat('.', a:cnt).'\[?\k{-}%#&('.repeat('.', a:cnt).')(\[\k*\])'
    exe 'keepj keepp s/\v'.(a:fwd ? pat1 : pat2).'/\2\1/e'
    exe &modified ? 'norm! '.(pos+(a:fwd ? a:cnt : -a:cnt)).'|' : ''
    sil! call repeat#set("\(move_chords_".(a:fwd ? 'forward' : 'backward').')', a:cnt)
endfu


推荐阅读
author-avatar
世界著名墙头草
这个家伙很懒,什么也没留下!
RankList | 热门文章