有没有办法在vim的括号(或大括号)中包含一些文本?
换句话说,你会怎么做?
初始字符串:
It is sunny outside.
Run Code Online (Sandbox Code Playgroud)
最终字符串:
It is (sunny) outside.
Run Code Online (Sandbox Code Playgroud)
有趣的是,我只是点击:w提交这个问题.
快乐的viming,SOCommunity!
小智 67
总之,我一直在使用:
bcw()<Esc>P
Run Code Online (Sandbox Code Playgroud)
也就是说,转到单词的开头,剪切单词并进入插入模式,键入括号,然后退出插入模式并将单词粘贴回来.
请记住,这将覆盖你的猛烈注册.
当然,您可以用您需要的任何移动和选择类型替换bcw,例如
5cc{<Enter>}<Esc>P
Run Code Online (Sandbox Code Playgroud)
Dan*_*nny 31
以下是使用surround.vim的示例.在vim普通模式下,将光标放在所需的单词上(在这种情况下是晴天)并键入:
ysiw
Run Code Online (Sandbox Code Playgroud)
然后输入 )
所以:
初始字符串:
It is sunny outside.
Run Code Online (Sandbox Code Playgroud)
最终字符串:
It is (sunny) outside.
Run Code Online (Sandbox Code Playgroud)
额外空间:
使用开口支架或支架,如ysiw(用parens包围,以及paren和word + end之间的空格)
可视模式更简单
按下进入视觉模式v.现在,如果您键入S(,该单词将被空格包围.不过,如果你使用闭幕),而不是S)它不会受到空间包围.
这适用于所有支架对周围环境<> [] {} (),而不仅仅适用于().它的行为S<是这样的,它需要一个标签外壳,所以只能S>包围 <>.
更多:
键入ysiw后跟}为curlies做同样的事情
不妨在这里添加更多示例:
输入cs('到[c] hange [s] urroundings from(to'
cs'( 从'环境变为()
ds(.至[d] elete ([s] urroundings
更:
为什么不引用Tpope页面的其余部分来阻止我们点击链接?
//开始引用:
用例子解释是最容易的.
按
cs"'里面"你好,世界!" 将其改为
'你好,世界!'
-
现在按
'Hello world!'将其更改为你好,世界!
-
要完整循环,按下
cs'<q>即可获得"你好,世界!"
-
要完全删除分隔符,请按
<q>Hello world!</q>你好,世界!
-
现在将光标放在"Hello"上,按
cst"(iw是文本对象).[你好,世界!让我们做括号并添加一些空格(使用}而不是{for no space):
"Hello world!"{ 你好,世界!
-
现在用
ds".或将整行用括号括起来Hello world!.({ 你好,世界!)
-
恢复原文:
ysiw]你好,世界!
-
问候你好:
[Hello] world!你好世界!
-
最后,让我们尝试一下视觉模式.按一个大写
cs]{(对于线性可视模式),然后按{ Hello } world!.Run Code Online (Sandbox Code Playgroud)<p class="important"> <em>Hello</em> world! </p>
这个插件非常适用于HTML和XML编辑,这个目前似乎在Vim土地上没有充足.(与HTML/XML插入相反,其中有许多插件可用).同时添加,更改和删除标签对是一件轻而易举的事.
该yssb命令将工作yss),({ Hello } world!)以及ds{ds)如果你安装repeat.vim.
您可以为该类别定义一个简单的映射.这应该做到这一点.在正常模式下,键入z以括住括号中的单词.
:nnoremap <leader>z viw<esc>a)<esc>hbi(<esc>lel
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以使用以下命令:
cw(<C-r><C-o>")<ESC>
Run Code Online (Sandbox Code Playgroud)
优点是您可以使用点命令对不同的单词重复此操作。这也适用于自定义封装,例如:
变更前:
word
Run Code Online (Sandbox Code Playgroud)
然后使用命令:
cw\enquote{<C-r><C-o>"}<ESC>
Run Code Online (Sandbox Code Playgroud)
最后结果:
\enquote{word}
Run Code Online (Sandbox Code Playgroud)
为什么不使用:s//(搜索和替换)?
例如:
:s/sunny/(&)/
Run Code Online (Sandbox Code Playgroud)
您可能有其他想法,但我无法从您的问题中看出它是什么。
(&是匹配文本的简写)
旁白:要自动执行此操作,您可以像这样录制宏:(光标位于 开头sunny):
qq - 开始在寄存器中录制宏 qye- 猛拉到单词的末尾(sunny在这种情况下为 ) - 也可以yE,等等。: - 进入命令模式Ctrl+R, ", 粘贴被拉取的文本/(&)/- 完成命令,如上所述。命令行现在将读取:s/sunny/(&)/enter - 运行添加括号的命令。q - 停止录制宏现在,如果你去开始一个不同的词,你可以输入@q来运行宏。宏中的任何内容都不是特定于单词的sunny,因此它应该适用于任何事情。
您可以通过首先执行b,或这样来更新它以在单词中间工作。你明白了。您可能还想保存和恢复光标位置,这很容易添加(例如:mz在开始和`z 在结束)。
| 归档时间: |
|
| 查看次数: |
29512 次 |
| 最近记录: |