Поиск…
поиск
Прыжки к персонажам
f {char} - перейти к следующему вхождению {char} справа от курсора на той же строке
F {char} - перейти к следующему вхождению {char} слева от курсора на той же строке
t {char} - перемещение влево от следующего вхождения {char} справа от курсора на той же строке
T {char} - перейти вправо от следующего вхождения {char} слева от курсора на той же строке
Переход вперед / назад между «результатами» через ; и.
Далее вы можете искать целые слова через /<searchterm>
Enter .
Поиск строк
* - перейти к следующему вводу слова под курсором
# - переход к предыдущему вхождению слова под курсором
/ searchterm
Enter приводит вас к следующему совпадению (forward-search). Если вы используете ? вместо / , поиск идет назад.
Переход между совпадениями через n (следующий) и N (предыдущий).
Чтобы просмотреть / изменить предыдущие поисковые запросы, введите / и нажмите клавишу со стрелкой вверх .
Полезны также следующие настройки: (примечание :se
равно :set
)
-
:se hls
HighLightSearch, выделяет все совпадения поиска; use:noh
для временного отключения подсветки поиска / метки (:set noh
или:set nohls
отключается.) -
:se is
or:set incs
turn Incremental Search on, курсор автоматически переходит к следующему совпадению. (:se nois
отключается.) -
:se ic
IgnoreCase, отключает чувствительность к регистру. (:se noic
включается снова.) -
:se scs
SmartCaSe, может использоваться при установке IgnoreCase; делает случай (in) чувствительность smart ! например/the
будет искать , ,the
The
ThE
и т.д. , а/The
только будет искать .The
Основное движение
замечания
- Каждое движение можно использовать после команды оператора, поэтому команда работает с текстом, содержащимся в охвате движения.
- Так же , как команды оператора, движения могут включать в себя подсчет, так что вы можете перемещаться по 2w ords, например.
Стрелы
В Vim обычные клавиши курсора / курсора ( ← ↓ ↑ → ) работают так, как ожидалось. Однако для сенсорных устройств легче использовать альтернативные клавиши h j k l . На обычной клавиатуре они расположены рядом друг с другом в одной строке и легко доступны с правой стороны. Мнемонический метод, чтобы помнить, что из них происходит следующим образом:
- h / l - те, что расположены «наиболее слева направо» среди четырех букв на клавиатуре, поэтому они эквивалентны «идти влево / вправо» соответственно;
- j - нижний регистр «j» имеет хвост, идущий «вниз» ниже типичных букв, как небольшая стрелка, поэтому это эквивалентно «спуску»;
- k - наоборот, нижний регистр «k» имеет свой «восходящий», «вверх» выше типичных букв, как небольшой указатель, поэтому он эквивалентен «подъему».
Основные движения
Все приведенные ниже команды должны выполняться в обычном режиме .
команда | Описание |
---|---|
ч или слева | go [count] символов влево |
j или вниз | go [count] символов ниже |
k или вверх | go [count] символов выше |
л или справа | go [count] символов вправо |
гг | перейти к первой строке или [count] 'th строке, если задано |
ЧАС | перейдите в первую строку на видимом экране |
M | перейдите в среднюю строку на видимом экране |
L | перейти к последней строке на видимом экране |
г | перейдите к последней строке или [count] 'th строке, если задано |
Главная или 0 | перейти к первому символу строки |
^ | перейти к первому непустому символу строки |
+ | сходите на одну строку до первого непустого символа |
- | перейти на одну строку до первого непустого символа |
$ или конец | перейдите в конец строки (если задано [count] , идите вниз [count - 1] ) |
| | перейдите к символу [count] 'th или перейдите к началу строки, если count не указан |
F {} символ | перейдите к [count] '-му вхождению {char} вправо включительно |
F {} символ | перейдите к [count] '-му вхождению {char} влево включительно |
т {} символ | перейдите к [count] '-му вхождению {char} в правую эксклюзивную |
Т {} символ | перейдите к [count] '-му вхождению {char} в левое эксклюзивное |
; | повторять последние f , t , F или T [count] раз |
, | повторите последние f , t , F или T , в обратном направлении, [count] раз |
вес | перейти к началу следующего слова |
б | перейти к началу предыдущего слова |
е | перейти к окончанию следующего слова |
GE | перейти к окончанию предыдущего слова |
% | перейти к совпадающим парам, например (), [], {} , /* */ или #if, #ifdef, #else, #elif, #endif |
{ } | предыдущий / следующий параграф |
[{ ]} | начало / окончание блока |
{} голец | Перейти к отметке (метка с m {char} ) |
<CB> <CF> | предыдущая / следующая страница |
<CO> <CI> | Вернитесь назад или вперед в «список прыжков» (требуется функция jumplist , см. jumplist :help jumps ) |
Примечание: b , e и w считают слово iskeyword
, цифрами и подчеркиваниями по умолчанию (это может быть настроено с настройкой iskeyword
). Каждая из них также может быть заглавной, заставляя их пропускать все, что не является пробелом.
Примечание: Vim распознает два вида движения: движение оператора ( :help movement
) и прыжки ( :help jumplist
). Движения, подобные тем, которые выполняются с g
( gg
, G
, g,
), считаются прыжками, как и изменения. Изменения получают свой собственный jumplist, который является судоходным, как указано выше, через g,
и g;
(см :help changelist
). Переходы не рассматриваются как команды движения Vim
При перемещении вверх или вниз по строкам курсор сохраняет свой столбец, как и следовало ожидать. Если новая строка слишком короткая, курсор перемещается в конец новой строки. Если столбец находится за пределами строки, курсор отображается в конце строки. Начальный номер столбца все еще сохраняется до тех пор, пока не будет предпринято действие для его изменения (например, редактирование текста или явно движущийся столбец).
Если длина строки превышает ширину экрана, текст обернут (в настройках по умолчанию это поведение можно настроить). Для перемещения по строкам, отображаемым на экране, а не строк внутри файла, добавьте g перед обычной командой. Например, gj переместит курсор в позицию, отображаемую на одну строку ниже текущей позиции, даже если она находится в одной строке файла.
Поиск шаблона
Vim поддерживает использование регулярных выражений при поиске по файлу.
Символом, указывающим, что вы хотите выполнить поиск, является /
.
Самый простой поиск, который вы можете выполнить, следующий
/if
Это будет искать весь файл для всех экземпляров if
. Тем не менее, наш поиск, if
на самом деле является регулярным выражением, которое будет соответствовать любому вхождению слова, if
включает внутри других слов.
Например, наш поиск сказал бы, что все следующие слова соответствуют нашему запросу: if
, spiffy
, endif
и т. Д.
Мы можем выполнять более сложные поиски, используя более сложные регулярные выражения.
Если бы наш поиск:
/\<if\>
тогда наш поиск вернет только точные соответствия полному слову if
. Вышеприведенный spiffy
и endif
не будут возвращены поиском, только if
.
Мы также можем использовать диапазоны. Учитывая файл:
hello1
hello2
hello3
hello4
Если мы хотим найти эти строки, содержащие «привет», а затем цифру от 1 до 3, мы бы сказали:
/hello[1-3]
Другой пример:
/(?:\d*\.)?\d+
найдет все целые и десятичные числа в файле.
Переход к началу определенного слова
При редактировании текста общей задачей является переход к определенному слову на экране. В этих примерах мы исследуем, как мы можем перейти к updated
слову. Ради последовательности на примерах мы стремимся приземлиться на первую букву слова.
Экран среднего экрана
M $ B
Этот подход выполняется быстро, используя только 3 нажатия клавиш. Недостаток, однако, заключается в том, что он не очень общий, так как нередко для нашей целевой линии может оказаться ложь в середине экрана. Тем не менее, это полезное движение при выполнении менее гранулированных движений.
Использование счетчика
3j f u ; ;
На первый взгляд это может показаться шагом назад от первого подхода из-за количества нажатий клавиш. Но поскольку мы используем счет здесь вместо M , он более гибкий. Мы можем быстро определить правильный счетчик для использования, если включено relativenumber . Чтобы перейти к целевому слову, используя f в сочетании с ; может быть удивительно эффективным - и, конечно, лучше, чем повторное нажатие w . Если вы превысите свою цель ; , Вы можете пойти в обратном направлении с,.
Явный поиск
/ up Введите n n
Навигация через / может быть очень мощным. Мы часто можем перейти непосредственно к нашему целевому слову, набрав его. Здесь мы печатаем только первые два символа в надежде, что это однозначно соответствует нашему слову. К сожалению, существует несколько совпадений, но мы можем быстро перейти к следующему совпадению с n .
Неявный поиск
/ y Пробел Введите w
В некоторых случаях, возможно, более эффективно прыгать рядом с нашей целью, а не пытаться перейти непосредственно к ней. Здесь мы наблюдаем, что есть редко встречающаяся буква, y
, рядом с целью. Мы можем добавить Пробел в наш поисковый запрос, чтобы уменьшить вероятность того, что мы нанесли удар по другому символу y
на этом пути. Это также можно использовать для большого эффекта с помощью f {char} , как в примере Использование счетчика .
Использование меток для перемещения вокруг
Знаки похожи на закладки; они помогают вам найти места, где вы уже были.
TLDR
Установите их в нормальном режиме с помощью m{a-zA-Z}
и m{a-zA-Z}
к ним в обычном или визуальном режиме с помощью '{a-zA-Z}
(одинарная кавычка) `{a-zA-Z}
( `{a-zA-Z}
). Строчные буквы для меток в буфере, а заглавные буквы и цифры являются глобальными. См. Текущие установленные метки :marks
, а для получения дополнительной информации см :help mark
.
Установить отметку
Встроенная помощь Vim говорит:
m{a-zA-Z} Set mark {a-zA-Z} at cursor position (does not move
the cursor, this is not a motion command).
Знак будет отслеживать, какую строку и столбец он был помещен. Нет визуального подтверждения того, что отметка была установлена, или если знак имел предыдущее значение и был перезаписан.
Перейти к отметке
Встроенная помощь Vim говорит:
Jumping to a mark can be done in two ways:
1. With ` (backtick): The cursor is positioned at the specified location
and the motion is exclusive.
2. With ' (single quote): The cursor is positioned on the first non-blank
character in the line of the specified location and
the motion is linewise.
Backtick использует позицию столбца, а Single-quote - нет. Разница между просто позволяет вам игнорировать позицию столбца вашего знака, если хотите.
Вы можете переходить между неглобальными метками в визуальном режиме в дополнение к нормальному режиму, чтобы можно было выбирать текст на основе меток.
Глобальные отметки
Глобальные отметки (заглавные буквы) позволяют прыгать между файлами. Это означает, что если, например, метка A
установлена в foo.txt
, то из bar.txt
(где угодно в моей файловой системе), если я bar.txt
к отметке A
, мой текущий буфер будет заменен на foo.txt
. Vim предложит сохранить изменения.
Прыгать к отметке в другом файле не считается движением, а визуальные выделения (между прочим) не будут работать, как прыжки в метки в буфере.
Чтобы вернуться к предыдущему файлу ( bar.txt
в этом случае), используйте :b[uffer] #
(то есть :b#
или :buffer#
).
Замечания:
Специальные марки
Есть определенные отметки, которые Vim устанавливает автоматически (которые вы можете перезаписать самостоятельно, но, вероятно, это не понадобится).
Например (перефразированный с помощью Вима):
`[` and `]`: jump to the first or last character of the previously changed or
yanked text. {not in Vi}
`<` and `>`: jump to the first or last line (with `'`) or character (with
<code>`</code>) of the last selected Visual area in the current
buffer. For block mode it may also be the last character in the
first line (to be able to define the block). {not in Vi}.
Более того, из встроенной помощи Вима:
'' `` To the position before the latest jump, or where the
last "m'" or "m`" command was given. Not set when the
:keepjumps command modifier was used.
Also see restore-position.
'" `" To the cursor position when last exiting the current
buffer. Defaults to the first character of the first
line. See last-position-jump for how to use this
for each opened file.
Only one position is remembered per buffer, not one
for each window. As long as the buffer is visible in
a window the position won't be changed.
{not in Vi}.
'. `. To the position where the last change was made. The
position is at or near where the change started.
Sometimes a command is executed as several changes,
then the position can be near the end of what the
command changed. For example when inserting a word,
the position will be on the last character.
{not in Vi}
'" `" To the cursor position when last exiting the current
buffer. Defaults to the first character of the first
line. See last-position-jump for how to use this
for each opened file.
Only one position is remembered per buffer, not one
for each window. As long as the buffer is visible in
a window the position won't be changed.
{not in Vi}.
'^ `^ To the position where the cursor was the last time
when Insert mode was stopped. This is used by the
gi command. Not set when the :keepjumps command
modifier was used. {not in Vi}
Кроме того, символы (
, )
, {
, и }
являются метками, которые переходят в ту же позицию, что и их команды в нормальном режиме, то есть, '}
делают то же самое в обычном режиме как }
.
Перейти к определенной строке
Чтобы перейти к определенной строке с номером двоеточия. Чтобы перейти к первой строке файла, используйте
:1
Чтобы перейти к строке 23
:23