Notepad ++喜欢VIM中的“多重编辑”吗?

时间:2010-05-08 21:33:53

标签: vim notepad++

我正在从Notepad ++切换到VIM作为主文本编辑器。

Notepad ++可以通过按住ctrl并单击文本中的任意位置来拥有多个游标,因此如果键入,文本将显示在多个位置。

vim有可能吗?在可视模式下选择多行后插入的东西,但可以在文本中的任何位置放置光标。

这是我很少使用的功能,也很容易避免,我只是很好奇,因为它是唯一一个我无法在vim中找到替代品的功能。

4 个答案:

答案 0 :(得分:6)

没有这种内置功能。<​​/ p>

让我建议一个重复命令的函数(例如.重复一次 更改命令)在给定标记的位置。标记和命令都是 指定为字符串参数。方式中指定的标记范围为常规 表达式或scanf - 格式说明符已定义。例如,za-dx 表示标记zabcdx

function! MarksRepeat(marks, command)
    let pos = 0
    let len = strlen(a:marks)
    let alpha = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    let beta =  '1234567899bcdefghijklmnopqrstuvwxyzzBCDEFGHIJKLMNOPQRSTUVWXYZZ'
    while pos < len
        if a:marks[pos + 1] != '-'
            exe 'norm `' . a:marks[pos] . a:command
            let pos += 1
        elseif a:marks[pos] <= a:marks[pos+2]
            let mark = a:marks[pos]
            let stop = a:marks[pos+2]
            if mark =~ '[0-9a-zA-Z]' && stop =~ '[0-9a-zA-Z]'
                while 1
                    exe 'norm `' . mark . a:command
                    if mark == stop
                        break
                    endif
                    let mark = tr(mark, alpha, beta)
                endwhile
            endif
            let pos += 3
        endif
    endwhile
endfunction

在您的情况下,该功能可以如下使用。

  1. 使用Vim标记所有同时插入的位置(除了一个) 标记(通过m命令)。
  2. 实际上在一个尚未标记的地方插入文字。
  3. 运行功能:

    :call MarksRepeat(‹marks›, '.')
    

答案 1 :(得分:5)

您可以在一个操作中将文本插入一个位置,然后使用.在您想要文本的其他位置重复插入。

这与你要求的相反,因为你想在输入文本之前标记位置,但它在相同数量的击键中给你相同的结果:)。

答案 2 :(得分:4)

答案 3 :(得分:3)

ib的响应和多选vim插件很有趣,但以下是一个不需要特殊功能或插件的建议。

暂时set foldmethod=manual,然后使用zf标记要操作的块。

最后,使用ex命令:folddoclosed在折叠的块上执行ex命令。

例如::folddoclosed norm Iinsert some text at the front

注意,您可以在任何折叠的线组上使用:folddoclosed,因此您可以使用其他折叠方法...但通常手动创建折叠是有意义的。

你也可以使用视觉标记,然后是:norm,它会为你提供:'<,'>norm ...但是视觉标记只允许你选择连续的线条范围。使用折叠和:folddoclosed,您可以同时对多个范围的线进行操作。

另一个提示......为了节省输入:folddoclosed的时间,我会输入:fo<shifttab><shifttab><shifttab>