Vim:如何使用其他命令撰写搜索?

时间:2014-02-06 12:07:51

标签: vim

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

  1. 在插入模式下,因为在我编辑
  2. 时着色效果不佳
  3. 当我搜索时,因为着色似乎会覆盖搜索hl
  4. 我解决了第一个问题:

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

    但是,第二个问题比较棘手。起初我以为我可以只映射/,我的搜索键,以便首先切换上下文着色然后执行搜索。但是,我无法弄清楚如何编写该映射。如何在我的地图中存储“/”的原始含义?

    谢谢,

    P.S。看看这个甜蜜的上下文着色(solarized)。 enter image description here

2 个答案:

答案 0 :(得分:3)

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

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

我仍在尝试弄清楚插入模式下最佳行为应该是什么......这很棘手,因为代码语法在编辑过程中无效,当代码无法解析时,插件无法正常工作(而且你会看到常规语法高亮显示..这可能是一件好事,因为语法高亮的一个值是可视语法检查!)。另一种选择是假设它与编辑开始时的级别相同,并且通过在编辑期间添加/删除许多字符来抵消以下文本。另一种选择是在正在编辑的区域中使用语法高亮显示(当前行?)。

答案 1 :(得分:2)

/将进入命令模式。

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

类似

nnoremap <expr> / YourFunction()

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

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

或者只是创建一个autocmd,进入普通模式时,打开突出显示。

我没有测试过上述想法,希望它有所帮助。