Vim 记事本++;例如;“多重编辑”;在维姆?
我正在从Notepad++切换到Vim作为我的主文本编辑器 在记事本++中,按住Ctrl键并单击文本中的任意位置可以有多个光标,因此如果键入,文本将显示在多个位置 在Vim中可能吗?类似于在视觉模式下选择多行后插入,但可以在文本中的任何位置使用光标Vim 记事本++;例如;“多重编辑”;在维姆?,vim,notepad++,Vim,Notepad++,我正在从Notepad++切换到Vim作为我的主文本编辑器 在记事本++中,按住Ctrl键并单击文本中的任意位置可以有多个光标,因此如果键入,文本将显示在多个位置 在Vim中可能吗?类似于在视觉模式下选择多行后插入,但可以在文本中的任何位置使用光标 这是一个我很少使用的特性,也是很容易避免的;我只是好奇,因为这是我在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›, '.')