1

При редактировании огромных файлов мне нужно перемещаться на основе поиска по шаблону (несмотря на то, что я использую 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

Что я хочу, так это когда я перешел в строку 1 с помощью поиска #include, он должен просто перейти к вхождению без изменения текущего шаблона.

Можно ли легко добиться этого в vim?

TLDR Я хочу перемещать / переходить внутри файла, основываясь на шаблоне, не меняя текущий шаблон, чтобы в следующий раз, когда я делаю n или N, старый шаблон все еще работал без необходимости восстанавливать его, выполняя / затем uparrow

1 ответ1

1

Вы можете использовать эти пользовательские сопоставления для поиска вверх и вниз без "загрязнения" истории поиска (используемой nN) или удаления выделения из предыдущего "обычного" поиска:

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

Переопределение нормального / а ? не звучит для меня как жизнеспособная идея.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .