vim - 自定义绑定以将选择括在括号中
问题描述
我有一个漂亮的组合键可以将一个单词括在括号中:
cw(<C-r><C-o>")<ESC>
.
我想要做的是创建一个自定义绑定,(
它可以对任何选择进行操作。
如果我处于可视模式并选择了一个文本块或几个块,(
则应将所有选定的块括在括号中。
如果我在正常模式和类型(3j
,它应该执行组合c3j(<C-r><C-o>")<ESC>
。
谢谢您的帮助。
解决方案
您需要的是正常模式'opfunc'
的g@
映射。所以它看起来像:
function WrapInParens(type, ...) abort
let sel_save = &selection
let &selection = "inclusive"
let reg_save = @@
if a:0 " Invoked from Visual mode, use gv command.
silent exe "normal! gvc(\<C-r>\<C-o>\")"
elseif a:type == 'line'
silent exe "normal! '[V']c(\<C-r>\<C-o>\")"
else
silent exe "normal! `[v`]c(\<C-r>\<C-o>\")"
endif
let &selection = sel_save
let @@ = reg_save
end
nnoremap ( :set opfunc=WrapInParens<CR>g@
或类似的。这应该给你一个概述(我没有测试过)
但是,有 2 个插件可以提供此类功能而不会覆盖(
:
推荐阅读
- node.js - 在箭头函数节点中设置全局变量
- html - 我的引导导航栏切换器不工作
- java - ListView 列表图标显示
- matplotlib - 如何限制颜色条?
- twitter-bootstrap - Chrome 没有给出引导代码的预期输出
- python-3.x - 导入 nn_parser 时 Spacy_DLL 加载失败
- regex - 用于解析 YAML 的正则表达式
- material-ui - 材质 ui 网格和断点,使用 lg 但不使用 md 或 xs
- selenium - 在 Selenium maven 项目中无法使用 chrome 浏览器
- java - 如何在android中的片段和活动之间共享数据