Что делают команды f и t в Vim?


126

Может кто - нибудь объяснить мне , что fи tкоманды делают в Vim и как именно они работают? Я не могу найти эту информацию, но люди продолжают говорить мне, что они очень полезны. Был бы очень признателен за ответ с примером, если возможно, спасибо!

Ответы:


204

Ваша первая остановка с подобными вопросами должна быть внутренней справкой vim, :h fи :h t. Однако в этом случае эти записи без примера выглядят немного загадочно. Предположим, у нас есть эта строка ( ^= позиция курсора):

The quick brown fox jumps over the lazy dog.
^

Эти команды находят символы в строке. Так fbчто поместите сюда курсор:

The quick brown fox jumps over the lazy dog.
          ^

tпохоже, fно помещает курсор на предыдущий символ. Так tbдала бы вам:

The quick brown fox jumps over the lazy dog.
         ^

Вы можете запомнить эти команды как find и till. Кроме того, вы можете добавить к командам число, чтобы перейти к n-му вхождению этого символа. Например, 3fbпереместится к третьему b справа от курсора. Однако в моем примере предложения только один b, поэтому курсор вообще не двигается.


4
Большое спасибо, это было прекрасно, я совершенно забыл о команде: h, это моя первая неделя использования Vim, это была огромная помощь, спасибо!
Дэн

1
Когда я делаю 'fb', меня переводят в b (rown). Как я могу напрямую получить b (r) собственное? Есть ли способ без хйкл?
dangdis

15
А если писать буквы в верхнем регистре, то скачет назад. Так например Fbили Tb.
be-ndee

2
@ancm, как сказал be-ndee, Fx или Tx, где x - это символ для поиска.
микки

1
с новичками, вероятно, стоит подойти немного проще :help, потому что это не всегда дает лучшее объяснение для неэзотерической толпы. что вообще to [count]'thзначит?
Тихолиз

121

Просто чтобы добавить к ответу Майкла Кристофика , никакое описание fили tполное без упоминания ;.

Из этой шпаргалки по Vim :

; «Повторить последнее f, t, F или T [количество] раз».

Итак, в продолжение темы @ MichaelKristofik:

The quick brown fox jumps over the lazy dog.
^

введите, foчтобы перейти к первому 'o':

The quick brown fox jumps over the lazy dog.
            ^

а затем ;перейти к следующему:

The quick brown fox jumps over the lazy dog.
                 ^

1
; tip довольно полезен, хотя я не понимаю, как он работает с 't'. Я пытался, но застрял в одном и том же положении, независимо от того, сколько раз повторяется команда t.
Петер Перхач,

@ PeterPerháč Нажмите точку с запятой несколько раз. Работает для меня.
LondonRob

@ PeterPerháč, я думаю, что с командой t сложнее, поскольку при поиске вперед для x точка с запятой будет находить тот же x каждый раз, когда вы нажимаете;, поэтому не перемещается. Если вы нажмете l один раз, а затем поставите точку с запятой, все должно сработать.
микки

@ PeterPerháč Убедитесь, что вы еще не достигли (на один символ раньше) последнего вхождения в строке, и он должен найти следующее вхождение.
Адам Эванс,

51

Я нахожу fи tочень полезными в сочетании с dи c. Например, ct:вы можете заменить все от курсора до следующего двоеточия, но не удалить двоеточие. Вы можете запомнить это как «перейти на двоеточие».


5
+1! Идиомы вроде ct,или ct)для быстрой замены одного или последнего аргумента в вызове функции приятно использовать.
nperson325681

15
Я предпочитаю, vt:cпотому что вы не всегда замечаете каждое вхождение данной буквы на 100% правильно. С vего помощью вы можете увидеть визуальный выбор, приятный визуальный сигнал.
Bentley4

1
Я предпочитаю мнемонику «заменить до двоеточия»
Патрик Михаэльсен

34

fxпереходит к следующему x в строке.

txпереходит к символу непосредственно перед следующим x в строке.

Вы можете использовать Fxи Txдля перехода к предыдущему x .

Вы можете использовать, 2fxчтобы перейти ко второму xна линии.

Итак, fFи tTполезны, когда вы хотите быстро перейти к следующему набору круглых скобок ( f() или удалить все от курсора до предыдущей =( dT=) , но исключая предыдущую и т. Д.

Смотрите :h motion.txt. Это взорвет ваш ум.


2
спасибо, что упомянули об этом 2fx. Я всегда путаю это сf2x
Яр
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.