在编辑大文件时,我需要根据模式搜索进行移动(尽管我使用了 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() 的原型。我必须执行以下操作:
- 向上搜索#include,获取文件中的最后一个#include 实例
- 在下一行添加 foo 的原型
- 恢复最后一个搜索模式,即 printf
我想要的是,当我通过搜索#include 移动到第 1 行时,它应该只是移动到发生的位置而不改变当前模式。
是否可以轻松在 vim 中实现这一点?
结论
我想根据模式在文件内移动/跳转而不改变当前模式,以便下次我执行 n 或 N 时旧模式仍然有效,而无需通过执行然后恢复/
它uparrow
答案1
您可以使用这些自定义映射向上和向下搜索,而不会“污染”搜索历史记录(由 使用nN
)或从前面的“正常”搜索中删除突出显示:
nnoremap ,/ :<C-u>call search(input("/"))<CR>
nnoremap ,? :<C-u>call search(input("?"),"b")<CR>
超越常态/
对?
我来说听起来不是一个可行的想法。