Vim: Як ви ефективно шукаєте текст?


30

Коли ви хочете шукати текст у vim, ви введете, /а потім рядок, яку шукаєте.

Однак, коли рядок довгий, і ви хочете зробити це кілька разів, чи є спосіб зробити це, щоб вам не довелося вводити /andthisreallylongstringбільше одного разу?


12
Рекомендую коротко ознайомитись із шпаргалками Vim чи підказками Vim - можливо, ви знайдете багато інших способів отримати більше користі від vim.
RedGrittyBrick

Порада: для Linux є текстові редактори, яким не потрібні тижні навчання.
BlueRaja - Danny Pflughoeft

4
@BlueRaja: не впевнений, що це гарне місце для війни редактора. Також для війни з ОС, оскільки є також приємні та зручні текстові редактори для ОС Windows або Mac. Необхідність вивчити ефективність роботи з редактором зробить вас, мабуть, більш ефективними в кінцевому підсумку, ніж дотримуватися основних функцій.
Бенуа

Відповіді:


61

Після завершення пошуку натисніть "n", тоді воно повторить попередню дію (пошук).


12
Також Nперейде до попереднього результату.
Джин

15
Також після натискання стрілки вгору після натискання /буде згадуватися останній пошуковий термін
bastibe

6
Також q/буде показано вікно, яке можна редагувати із усіма останніми пошуковими термінами.
UncleZeiv

7
Крім того, натискання /та Enter повторить попередній пошук. Натискання ?та клавіша Enter повторить попередній пошук назад.
Енді Лестер

3
/Ctrl-Fальтернатива тому, q/що може бути простішим мнемонічним (ctrl-f == знайти). Як і q, він також працює в командному режимі.
idbrii

34

Якщо рядок, який ви шукаєте, знаходиться під курсором, ви можете ввести його *для пошуку вперед або #для пошуку назад.


19

Як я зазвичай шукаю щось подібне;

  1. Натисніть "/"
  2. Введіть термін пошуку
  3. Натисніть Enter
  4. Використовуйте 'n' та 'N' для переміщення вперед та назад в межах пошуку.

Vim зберігає історію ваших пошукових запитів, тому якщо вам потрібні попередні пошукові запити, ви можете натиснути клавіші "/" та використовувати клавіші Вгору та Вниз та <Ctrl-P> <Ctrl-N> для перегляду історії пошуку.

Ви також можете використовувати "?" замість '/' для пошуку назад.

Я також люблю використовувати:

set ignorecase smartcase

Тепер це буде пошук з урахуванням регістру, якщо у рядку пошуку є великі літери.


15

Два додаткових рад , які можуть зробити ваш пошук більш ефективні set hlsearchі set incsearch.

  • set hlsearch, ну, висвітлює результати пошуку. Введіть, :nohщоб вимкнути їх, коли вам це більше не потрібно.

  • set incsearch вмикає поступовий пошук.

    Витягнуто з :help incsearch

    Вводячи команду пошуку, покажіть, де узор, як було введено досі, відповідає. Збірна рядок виділяється. Якщо шаблон недійсний або його не знайдено, нічого не відображається. Екран оновлюватиметься часто, це корисно лише для швидких терміналів.

    Без цього incsearchваші результати відображатимуться лише після натискання <CR>на ваше ключове слово.

    Приклад:

    Ви хочете шукати wildignore

    введіть тут опис зображення

    Ви вводите, /wildі перша відповідність виділяється автоматично.

    введіть тут опис зображення

    Потім наберіть iі перейдіть до наступного правильного поєднання.

    введіть тут опис зображення


13

Ще одна порада, яка ще не висвітлена: натиснувши символи, qпотім /ви побачите список попередніх пошукових термінів. Ви можете редагувати їх, як і будь-який інший рядок у документі, а потім натисніть клавішу Enter, щоб повторно використовувати їх для нового пошуку.


3
Шукав цього. Це важлива примітка і дуже тематична.
cincodenada

8

Натиснувши, /щоб почати пошук, ви можете стрілку вгору, щоб прокрутити історію пошуку.

Ви можете ввести регулярний вираз, щоб уникнути необхідності вводити весь пошуковий термін: and.*longstring


7

Чи просто удари / без аргументів, що випливають, не працюють для вас? У всіх наших системах це призводить до повторення будь-якого останнього пошуку.


6

Існує приємний зразок, який ви можете дотримуватися, щоб шукати вирваний текст . Тоді вам навіть не потрібно вводити слово саме по собі, якщо ви перейшли до нього іншими способами, ніж пошук. Підсумовуючи це, якщо ви користуєтесь першим символом слова, яке потрібно шукати:

v
e
y
/
Ctrl-r
0
Enter

(потім продовжуйте наступний матч з n або N)

Однак *(або #) виконує майже те саме, що і всі ці команди. Єдина відмінність полягає в тому, що ви можете бути гнучкими в тому, скільки вказаного вами слова (а не e, до кінця слова ви можете вибрати стільки, скільки хочете, наприклад, 9l)


1
  • /string - Шукати вперед для рядка
  • ?string - Пошук за рядком
  • n - Пошук наступного екземпляра рядка
  • N - Пошук попереднього екземпляра рядка

1

Дуже багато часу при програмуванні я хочу шукати aVeryLongVariableNameInTheProgram.

In vim ви можете дуже легко перетягувати текст у буфер / реєстр, а потім шукати його:

  • Поставте курсор на перший символ слова
  • "Bywщоб дістати текст aVeryLongVariableNameInTheProgramдо буфера B (виберіть улюблений, я використовував B)
  • /^RB (косою рисою, Ctrl-R, B), щоб вставити буфер B на рядок пошуку

Звичайно, ви також можете потягнути до кінця рядка і т. Д. Замість того, щоб поривати одне слово - я просто випадково використовую вищезгадану послідовність.


1

Крім того, ви можете вставити вміст будь-якого реєстру в рядок пошуку, натиснувши Ctrl+, Rа потім ім'я регістра, наприклад, / Ctrl+ R0 Enter.


Я думаю, вам слово.
dotancohen

0

Чи довгий рядок, який ви вводите ім'я змінної? Або довгий рядок, який є у вашому тексті? Потім натисніть, *щоб шукати слово / рядок під курсором.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.