【问题标题】:Vim: How to compose search with another command?Vim:如何用另一个命令组合搜索?
【发布时间】:2014-03-03 09:04:14
【问题描述】:

我刚刚安装了甜蜜的vim plugin,它为javascript 提供了context colouring。我已经摆弄了颜色,使它们恰到好处,我很高兴。但是,有时我不想要上下文着色:

  1. 在插入模式下,因为在我编辑时着色效果不佳
  2. 当我在搜索时,因为颜色似乎覆盖了搜索 hl

我解决了第一个问题:

autocmd InsertEnter *.js :JSContextColorToggle
autocmd InsertLeave *.js :JSContextColorToggle

但是,第二个问题更棘手。起初我以为我可以映射/,我的搜索键,以便它首先切换上下文颜色,然后执行搜索。不过,我无法弄清楚如何编写该映射。我将如何存储“/ 的本义”以在我的地图中使用?

谢谢,

附言看看这个甜蜜的上下文着色(solarized)。

【问题讨论】:

    标签: vim


    【解决方案1】:

    / 将进入命令模式。

    如果您只想使用/ 切换突出显示,我认为您需要map <expr>

    类似

    nnoremap <expr> / YourFunction()
    

    YourFunction() 中,您首先执行turn off the syntax hi,然后返回/

    但是您必须考虑何时恢复hi。您可以创建另一个命令模式映射,将&lt;cr&gt; 映射到第一个turn on the js hi,然后返回&lt;cr&gt;

    或者只是创建一个autocmd,进入普通模式时,打开高亮。

    我没有测试以上想法,希望对你有帮助。

    【讨论】:

    • 您提出了一个很好的观点:何时恢复着色。在接受您的回答之前,我会考虑一下。
    【解决方案2】:

    您好,我是插件的作者。我修复了与 hlsearch 的冲突,所以它现在应该可以工作了(尝试从 git 中提取最新版本,我还没有更新 vim.org..)

    关于插入模式的行为,vim 7.3 和 7.4 之间的行为有所不同。 7.4 具有 'TextChanged' 和 'TextChangedI' 事件,分别在正常和插入模式下更改文本时触发。这会触发突出显示更新。但是,TextChangedI 事件仅在离开插入模式时触发。因此,如果这是您想要的行为,您可以通过升级到 7.4 来获得它。在 7.3 中,我不得不挂钩 cursormoved 事件,该事件检查 'b:changedtick' 变量,每当发生更改时,vim 都会更新...我不确定这是否会在插入模式下发生,但我认为它可能会,哪个如果您使用的是 7.3,将解释奇怪的行为。

    我仍在尝试找出插入模式下的最佳行为...这很棘手,因为代码语法在编辑期间可能无效,并且当无法解析代码时插件无法工作(你会看到常规语法高亮出现..这可能是一件好事,因为语法高亮的一个值是视觉语法检查!)。另一种选择是假设它与开始编辑时的级别相同,并将以下文本偏移但在编辑期间添加/删除了许多字符。另一种选择是在正在编辑的区域(当前行?)中突出显示语法。

    【讨论】:

    • 我认为在插入模式下关闭上下文着色是可行的方法。从语义上讲,这是有道理的:您正在“掉入”要编辑的代码的上下文中,因此您失去了鸟瞰图。 “视觉语法检查”真的很棒:我不再忘记对象定义中的,,因为上下文着色拒绝重新打开。很好的副作用!
    • 我想我会接受另一个答案,因为问题是“如何用另一个命令组合搜索”。不过,您的修复解决了我的问题。
    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2020-10-09
    • 1970-01-01
    • 2017-10-28
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多