vim:移动到模式而不改变当前模式

vim:移动到模式而不改变当前模式

在编辑大文件时,我需要根据模式搜索进行移动(尽管我使用了 ctags、cscope、Lid),但我不想在这样做时扰乱当前的高亮搜索。

原因是我要使用的模式时间极短,我必须手动恢复上一个模式。

让我举例解释一下。如果我有如下文件:

  1 #include <stdio.h>
  2
  3 int main(int argc, char **argc)
  4 {
  5         printf("Hello World")
  6         foo();
  7         return 0;
  8 }
  9
 10 void foo(void)
 11 {
 12         printf("Just another function with no declaration yet\n");
 13 }

假设光标在第 5 行。printf("Hello World")我当前的搜索模式是 printf。

现在我想添加函数 foo() 的原型。我必须执行以下操作:

  1. 向上搜索#include,获取文件中的最后一个#include 实例
  2. 在下一行添加 foo 的原型
  3. 恢复最后一个搜索模式,即 printf

我想要的是,当我通过搜索#include 移动到第 1 行时,它应该只是移动到发生的位置而不改变当前模式。

是否可以轻松在 vim 中实现这一点?

结论 我想根据模式在文件内移动/跳转而不改变当前模式,以便下次我执行 n 或 N 时旧模式仍然有效,而无需通过执行然后恢复/uparrow

答案1

您可以使用这些自定义映射向上和向下搜索,而不会“污染”搜索历史记录(由 使用nN)或从前面的“正常”搜索中删除突出显示:

nnoremap ,/ :<C-u>call search(input("/"))<CR>
nnoremap ,? :<C-u>call search(input("?"),"b")<CR>

超越常态/?我来说听起来不是一个可行的想法。

相关内容