Vim: быстро перемещаться внутри длинной линии
У меня есть перенос слов и, как правило, имеют довольно длинные строки.
Но перемещение внутри линии, которая на самом деле имеет 4 линии с "w", громоздка. Я продолжаю использовать /, чтобы перейти к слову, которое я ищу, но это немного переусердствует.
Любые подсказки о том, как быстрее перемещаться внутри строки?
Спасибо,
MRB
Ответы
Ответ 1
- Вы можете использовать
$
, 0
и ^
для перехода к конечным точкам линии, а затем использовать w
и b
. Кроме того, добавление числового аргумента в w
и b
может ускорить процесс, поэтому использование 6w
вместо простого w
может привести вас к тому, где должно быть.
- Использование
f
и t
для перемещения к отдельным символам также поможет. (Я использую это обычно с пунктуацией.Если, например, у меня есть четыре предложения на одной длинной строке, то 2f.
перейдет к концу второго предложения)
- Использование клавиш
(
и )
- это альтернативный способ навигации по целым предложениям.
- Разделение длинных строк на несколько строк (вручную или с помощью
set tw=72
[или 80]) упрощает их редактирование. Вы можете присоединиться к ним позже с помощью J
.
- Что-то, что я только что обнаружил, вы можете перемещать вверх и вниз по одной строке, используя
gj
и gk
. Таким образом, вы можете обрабатывать свою обернутую линию как несколько строк.
Если вы прокомментируете тип данных, которые вы редактируете, это может облегчить нам возможность делать предложения.
Ответ 2
Я думаю, что вы можете использовать gk и gj вместо k и j.
Также посмотрите на 'virtualedit'
для некоторых параметров, которые позволяют вам курсор через области "void", не переведя курсор на следующий лучший физический символ.
Возможно, вы захотите (временно)
nnoremap <buffer> k gk
nnoremap <buffer> j gj
Оставьте часть <buffer>
, чтобы применить ее глобально.
Ответ 3
Вы можете использовать (
и )
для навигации по предложению; он просто ищет .
, но это может быть очень полезно, особенно если вам не нравится предложение и вы хотите его изменить: (c)
перейдет к началу текущего предложения, а затем изменит все предложение.
Вы также можете использовать w
и e
, с модификаторами подсчета, для перемещения слов. 3w
будет перемещать три слова за раз.
Вы также можете использовать f
и f
для поиска вперед и назад для определенного символа. Это гораздо полезнее, если вы ищете слово quite
или syzygy
, чем the
.:)
Ответ 4
Если вы решите пойти по пути переназначения этих:
nnoremap k gk
nnoremap j gj
вот пара других по тем же линиям:
nnoremap 0 g0
nnoremap $ g$
nnoremap ^ g^
Ответ 5
Моя предпочтительная стратегия при прыжке по длинным строкам состоит в том, чтобы использовать f
f
и t
t
в ноль на символе. Что делает это семейство движений наддувом, так это то, что вы можете использовать движения ;
и ,
, поэтому вам не нужно подсчитывать позицию символа относительно курсора, но просто пройдите через них (чрезвычайно полезно с
'
"
.
и т.д.)
Скажем, у нас есть прямая:
reallyLongObjectName.longMethod().prettyPrettyLongMethod().burp();
Если нам нужно перейти к, скажем, третьей точке от начала строки, мы можем использовать либо 3f.
, либо f.;;
, посещая две точки и приземляясь на треть.
В то время как стиль ;
,
может использовать больше нажатий клавиш, я нашел его более гибким и забавным в целом.
Ответ 6
Недавно я начал использовать плагин, который мне очень нравится очень быстро перемещаться внутри строки (или файла отверстия).
Имя плагина - PreciseJump, и вы можете найти его здесь.
При использовании этого плагина он определяет сопоставления _f и _F.
если вы наберете _f, за которым следует x, он выделит все символы x и временно заменит другие символы, которые вы можете нажать, чтобы перейти к этому месту. Проверьте страницу script для иллюстрации.
Ответ 7
Вы также можете перемещаться с помощью W
B
, который пропустит следующее пространство:)
G
перемещается в конец документа
Ответ 8
Обратите внимание, что использование "g", за которым следуют стрелки вверх или вниз, действительно работает нормально, но если у вас длинные строки и быстро перемещаются, вы можете ввести "gg" по ошибке и в конце вверху текста...! (Undo не вернет вас, и AFAIK не будет с одним нажатием клавиши, чтобы вернуться туда, где вы были.)
Это случалось со мной слишком много раз.
Что я сделал, и предлагаю вам изменить (или создать) ваш "~/.vimrc" и добавить эти две строки:
map <C-Up> g<Up>
map <C-Down> g<Down>
Это позволит вам контролировать и управлять командами перемещений. Сделает туманность "gg" невозможной и идеально согласуется с правом управления и контролем слева для перемещения по длинным линиям.
Если вы добавите эти две другие строки, вы можете использовать ту же команду в режиме вставки (!)
imap <C-Up> <C-[> g<Up> i
imap <C-Down> <C-[> g<Down> i
(VIM отлично!)
Грег Руо