Вопрос по shortcut, editor, vim – Сделать 'n' всегда искать вперед, независимо от того, / или? был использован для поиска

7

Я почти всегда ищу в Vim с/, а затем продолжить поиск вперед сn и назад сN, Иногда, однако, я использую? чтобы перейти к элементу всего на несколько строк выше линии I 'м в настоящее время, и в этом случае, если я хочу искать тот же элемент вперед, я должен использоватьN вместоnРаздражающая умственная скорость.

Итак, мой вопрос: можно ли сделатьn всегда идти вперед, иN назад?

Постскриптум Документация, кажется, намекает, что этоэто невозможно, так какn простоПовторяет последний "/" или же "?" [количество раз]но кто знает.

Ваш Ответ

2   ответа
6

несмотря на некоторые споры о разработчиках. список рассылки ...

Вот'Что вы можете с этим поделать:

:noremap n /<cr>
:noremap N ?<cr>
</cr></cr>

Соответствующая ветка списка рассылки с гораздо более интересной информацией:https://groups.google.com/d/msg/vim_dev/8jSoA931P2Y/JklYtxFOiAYJ

Жаль, Брэм победилНе могу включить мой патч. Это одно из моих самых больших неудобств с vim. Christian Brabandt
Я некажется, теряет/e флаг. FDinoff
Ах, тыЯ перепутал это с:s и неДостаточно проверить Интересно, есть лиЕще одна проблема, решение кажется слишком простым ... glts
Мне нравится Zyx 'ответ внизу темы. (И куда я собирался, если бы мог найти эту переменную, если бы ты нет отправил первым)noremap n 'Nn'[v:searchforward] а такжеnoremap N 'nN'[v:searchforward] FDinoff
9

Это было взято изZYX»с сообщением в списке рассылки vim.

noremap <expr> n 'Nn'[v:searchforward]
noremap <expr> N 'nN'[v:searchforward]
</expr></expr>

Это картыn к исходному N или n на основе переменнойv:searchforward путем индексации'Nn' как список из двух элементов. Это работает только потому, что отображение нерекурсивное. Если бы это было рекурсивно, это назвало бы себя, и вы были бы в бесконечном цикле.

когдаv:searchforward == 1 (поиск вперед) сопоставления эквивалентны

noremap <expr> n n
noremap <expr> N N
</expr></expr>

и когдаv:searchfoward == 0 (поиск в обратном направлении) сопоставления эквивалентны

noremap <expr> n N
noremap <expr> N n
</expr></expr>

Это отображение работает в режимах ожидания Normal, Visual и Operator.

Я, вероятно, написал бы это так. (Хотя я'Я не уверен, что это немного яснее)

noremap <expr> n (v:searchforward ? 'n' : 'N')
noremap <expr> N (v:searchforward ? 'N' : 'n')
</expr></expr>
Между прочим, поскольку эта тема была выдвинута, у меня есть новое решение для «Вы'верно, но, во-первых, я хотел, чтобы / pattern d // e (нажимал Enter по мере необходимости) повторялся с n.n.n.n. ” жалоба. ZyX
Вау, этогениальное картирование. dorserg

Похожие вопросы