我正在从Notepad ++切换到VIM作为主文本编辑器。
Notepad ++可以通过按住ctrl并单击文本中的任意位置来拥有多个游标,因此如果键入,文本将显示在多个位置。
vim有可能吗?在可视模式下选择多行后插入的东西,但可以在文本中的任何位置放置光标。
这是我很少使用的功能,也很容易避免,我只是很好奇,因为它是唯一一个我无法在vim中找到替代品的功能。
答案 0 :(得分:6)
没有这种内置功能。</ p>
让我建议一个重复命令的函数(例如.
重复一次
更改命令)在给定标记的位置。标记和命令都是
指定为字符串参数。方式中指定的标记范围为常规
表达式或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
在您的情况下,该功能可以如下使用。
m
命令)。运行功能:
: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>