有时我想跨多行编辑某个可视文本块。
例如,我会采用如下文字:
name
comment
phone
email
让它像这样被拉出来
vendor_name
vendor_comment
vendor_phone
vendor_email
目前我现在的做法是......
" vendor_"
。注意我们不得不放回的额外空间。如果在单词之前至少有一列空格,我不需要缩进。如果我不需要用 c 清除视觉块,我就不需要空格。
但是如果我必须清除,那么有没有办法在不创建所需的缩进空格的情况下执行上面执行的操作?
另外,为什么一次编辑多行只能通过 esc 退出 ctrl c 退出插入模式?
修改
这是一个更复杂的例子
name = models.CharField( max_length = 135 )
comment = models.TextField( blank = True )
phone = models.CharField( max_length = 135, blank = True )
email = models.EmailField( blank = True )
到
name = models.whatever.CharField( max_length = 135 )
comment = models.whatever.TextField( blank = True )
phone = models.whatever.CharField( max_length = 135, blank = True )
email = models.whatever.EmailField( blank = True )
在这个例子中,我将在.
上执行垂直视觉块,然后在插入模式期间重新插入它,即键入.whatever.
。希望现在你可以看到这种方法的缺点。我仅限于选择一列文字在垂直位置。
答案 0 :(得分:791)
n
中的name
。I
(大写i)。vendor_
。
必须使用大写I
而不是小写i
,因为小写i
被解释为text object的开头,这本身就很有用,例如用于选择标记块内部(it
):
答案 1 :(得分:62)
另一种方法是将。(dot
)命令与 I 结合使用。
vendor_
)我发现这种技术通常比视觉块模式更快,适用于少量添加,并且还有一个额外的好处,即如果您不需要在范围内的每一行上插入文本,您可以通过按下来轻松跳过它们额外 j 的。
请注意,对于大量连续添加,块方法或宏可能会更好。
答案 2 :(得分:27)
我会使用宏来记录我的动作,然后重复它。
qq
开始录制到q
缓冲区。i
进入插入模式,然后输入vector_
,然后点击ESC
退出插入模式。0
返回到行首。j
下降。q
以停止录制。你现在有一个漂亮的宏。
键入3@q
以执行宏3次以执行其余行。
答案 3 :(得分:27)
出版社:
输入新文字。
答案 4 :(得分:24)
:%s/^/vendor_/
或者我错过了什么?
答案 5 :(得分:11)
2016年1月更新
虽然接受的答案是一个很好的解决方案,但实际上这个键击的次数会少一些,并且可以更好地扩展 - 原则上基于接受的答案。
答案 6 :(得分:6)
您可能还有一个用例要删除文本块并替换它。
喜欢这个
Hello World
Hello World
要
Hello Cool
Hello Cool
你可以直观地选择" World"在这两行中。
键入c进行更改 - 现在您将处于插入模式。
插入你想要的东西并点击逃脱。
两者都是垂直反射的。它的工作方式就像我'除了它用新文本替换块而不是插入它。
答案 7 :(得分:5)
假设您有此文件:
something
name
comment
phone
email
somethine else
and more ...
您想在“名称”,“评论”,“电话”和“电子邮件”前面添加“vendor_”,无论它们出现在文件中的哪个位置。
:%s/\<\(name\|comment\|phone\|email\)\>/vendor_\1/gc
c
标志会提示您确认。如果您不想要提示,可以放弃。
答案 8 :(得分:5)
我想在只有vi(没有nano)的服务器上的某个配置文件中注释掉很多行,所以可视化方法也很麻烦 这就是我如何做到的。
vi file
:set number!
或:set number
:35,77s/^/#/
注意:这些数字是包含在内的,从35到77的行都将被修改。
要取消注释/撤消,只需使用:35,77s/^#//
如果您想在每行代码后添加文字作为注释,您还可以使用:
:35,77s/$/#test/
(对于像Python这样的语言)
:35,77s/;$/;\/\/test/
(适用于Java等语言)
币/出处:
答案 9 :(得分:1)
这是一个老问题,但我想提供一种更灵活的替代方案:
示例:在行的开头输入文本XYZ
:%norm IXYZ
这里发生了什么?
%
==在每一行执行norm
==在正常模式下执行以下键I
==在行首XYZ
==您要输入的文字然后你按Enter键,然后执行。
根据您的要求:
:%norm Ivendor_
您还可以选择特定范围:
:2,4norm Ivendor_
或在选定的视觉范围内执行:
:'<,'>norm Ivendor_
答案 10 :(得分:0)
Use Ctrl+V to enter visual block mode
Move Up/Down to select the columns of text in the lines you want to comment.
Then hit Shift+i and type the text you want to insert.
Then hit Esc, wait 1 second and the inserted text will appear on every line
答案 11 :(得分:0)
1. ctrl + v to go to visual block
2. select the lines using up and down arrow
3. enter small 3i ( presess SMALL I three times)
4. I (Press capital I, That will take you into insert mode)
4. Write the text you want to add
5. esc
6. press down arrow