Vim 记事本++;例如;“多重编辑”;在维姆?

Vim 记事本++;例如;“多重编辑”;在维姆?,vim,notepad++,Vim,Notepad++,我正在从Notepad++切换到Vim作为我的主文本编辑器 在记事本++中,按住Ctrl键并单击文本中的任意位置可以有多个光标,因此如果键入,文本将显示在多个位置 在Vim中可能吗?类似于在视觉模式下选择多行后插入,但可以在文本中的任何位置使用光标 这是一个我很少使用的特性,也是很容易避免的;我只是好奇,因为这是我在Vim中唯一找不到替代品的产品。没有这种内置功能 我建议使用一个重复命令的函数(例如,最后重复) 更改命令)在给定标记的位置。标记和命令都是 指定为字符串参数。方式中指定的标记以常规

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

在记事本++中,按住Ctrl键并单击文本中的任意位置可以有多个光标,因此如果键入,文本将显示在多个位置

在Vim中可能吗?类似于在视觉模式下选择多行后插入,但可以在文本中的任何位置使用光标


这是一个我很少使用的特性,也是很容易避免的;我只是好奇,因为这是我在Vim中唯一找不到替代品的产品。

没有这种内置功能

我建议使用一个重复命令的函数(例如,
最后重复) 更改命令)在给定标记的位置。标记和命令都是 指定为字符串参数。方式中指定的标记以常规方式排列 定义了表达式或
scanf
-格式说明符。例如,
za dx
表示标记
z
a
b
c
d
x

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

选中multi-select vim plugin:

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


这与您要求的正好相反,因为您希望在输入文本之前标记位置,但它会在相同的击键次数下给出相同的结果:)。

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

暂时
设置foldmethod=manual
,然后用
zf
标记要操作的块

最后,使用ex命令
:folddoclosed
对折叠块执行ex命令

例如:
:在前面插入一些文本

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


您还可以使用可视标记,后跟
:norm
,它提供了
:“我下载了最新版本的NP++,当我按住ctrl键单击时,什么也没有发生。我没有两个游标。是的,这必须在preferences/editingWow下启用,这有点酷。我不知道这个功能。很好!我也不知道这个功能。谢谢,很好用。我想在不使用标记的情况下重新编写它(我是编程vim的新手,所以这需要一些时间,我不确定这是否可能,但感谢您让我开始使用标记!)使用标记的有趣解决方案。查看我的解决方案,它不需要特殊功能。(使用
:folddoclosed
)使用手动折叠作为标记是一个非常好的主意!然而,与使用标记的尝试相反,此处不可能在这些线上存储特定位置,因为褶皱是线方向的对象。无论如何,多个游标与Vim编辑模型不匹配。
:call MarksRepeat(‹marks›, '.')