В очень длинном файле с (точно) кодом с отступом может быть полезно перейти непосредственно к строке текста над или под курсором, который ограничивает отступ.
(Один из способов сделать это может быть через метод отступа, сворачивая текущий уровень отступа, который сворачивает линии, ограничивающие уровень отступа, чтобы быть только от курсора j
или k
от него. Однако я нашел случаи, когда сворачивание отступа не смог поработать на интересующий меня отступ.)
Вот пример с курсором, помеченным подчеркиванием _
(во втором символьном столбце между определениями class Bazz
и class Qux
), но представьте, что количество абзацев или строк внутри module
s неизвестно или переменно:
module Foo
# lots of code...
end
module Bar
class Baz
# ...
end
class Bazz
# lots of code...
end
_
class Qux
# ...
end
class Quux
# lots of code...
end
end
... как я мог быстро перемещаться к o
из module Bar
выше курсора, или n
из end
под курсором в самой последней строке? Обратите внимание, что вертикальный столбец содержит пробелы, но также не содержит символов во втором столбце между class
определениями.
источник
Ответы:
Как насчет этой функции?
Вы можете
nnoremap gU :call FloatUp()<CR>
(gU
для «идти вверх»), а затем вызвать сgU
.Вот объяснение:
norm k
), пока выполняетсяwhile
условие.while
Условие выполняется , если это не первая линия (line(".") > 1
) и либоgetline(".")
символ текущей строки ( ) в текущем столбце ([col(".") - 1]
) является пробелом (=~ '\s'
то есть соответствует пробелу).источник
FloatDown
функцию. В мой .vimrc это идет, спасибо! github.com/alxndr/dotfiles/commit/0e25a302Мне нравится использовать поиск этих вещей, потому что регулярные выражения Vim имеют безумное количество вещей, которые вы можете искать, например, конкретные номера виртуальных столбцов, в этом случае:
nnoremap cd /\%<C-R>=virtcol(".")<CR>v\S<CR>
nnoremap cu ?\%<C-R>=virtcol(".")<CR>v\S<CR>
Используйте,
cd
чтобы спуститься иcu
подняться. Я думаю, «колонна вверх» и «колонка вниз» здесь. Я почти на 100% уверен, что это по умолчанию. Или выберите свои собственные сопоставления.Это должно работать независимо от того, используете вы табуляцию, пробелы или и то, и другое.
источник
=
Регистр является регистром выражения , которое вычисляет выражение на месте. Это очень удобно, если не странно.:let searchbak=@/<CR>
и добавить:let @/=searchbak<CR>
. Но в этот момент он становится длинным и недоступным и, возможно, должен быть просто функцией.Вы можете использовать плагин JumpToVerticalOccurrence (по умолчанию отображается на ]|и [|). Есть несколько других, ]V{char}которые работают как f, но вертикально. Вы можете, конечно, переназначить их по мере необходимости.
Если вы не хотите использовать плагин, вы можете попробовать использовать
:search
сvirtcol(.)
, например ,где:
virtcol('.')
дает вам текущий столбец,\S
обозначает не пропускиbW
для обратного поискаПроверьте,
:help search
чтобы узнать больше.Чтобы упростить использование, вы можете отобразить его, например:
С другой стороны , если ваш код содержит скобки, использовать %для перехода между сопоставляя их (например
{
,}
,[
,]
и т.д.) или использовать весь пункт подскакивает ( {, }с , Shiftесли это необходимо).Ссылки / источники:
источник
:h search()
:w
значитwrap around the end of the file
иW
значитdon't wrap around the end of the file
. Но почему вы собрали их вместе на втором:map
?w
не должно быть там, поэтому я удалил его, спасибо. Наверное меня смутило значение клавиш движения.Я использую модифицированную версию плагина vim-indent-object для обеспечения этого поведения. Мои модификации можно увидеть здесь .
Это позволяет мне
[i
перейти к началу текущего уровня отступа и]i
перейти к концу.источник
Это не совсем то , что вы просили , потому что это не вертикальное движение, но что - то , что похоже, быстро, и может быть достаточно хорош для вас , движется назад на 2 пункта: {{. Это приведет вас к линии прямо перед
module Bar
.источник
module
линией верхнего уровня существует неизвестное количество строк и / или абзацев . (В частности, эта ситуация возникла, когда я недавно просматривал сторонний код длиной в несколько тысяч строк с точным отступом, но без пустых строк и пытался найти внешний контекст определения модуля.)jeetsukumaran / vim-indentwise хорошо работает для относительных, абсолютных перемещений или перемещений в пределах блока через блоки с отступом.
источник
Для этого я использую свой собственный плагин move_until_char_changes.vim .
Я сопоставляю это с
gK
иgJ
.Он будет перепрыгивать через много строк с одним и тем же символом в текущем столбце (не только с пробелами), что может быть полезно в лог-файлах или дампах SQL с повторяющимися строками.
По умолчанию он сначала перемещается на одну строку, прежде чем поднять символ «поиск».
Он работает в визуальном режиме, если вы не пытаетесь использовать его дважды, и вы не находитесь в линейном или блочном визуальном режиме ... (исправления приветствуются!)
источник
Так как я не вижу здесь ответа ( редакция только что заметила, что superjer упомянул нечто очень похожее). Вы можете просто / или? поиск.
Например, вы можете искать вниз символ без пробелов во 2-м столбце, например:
Разбивка это:
Затем вы можете использовать обычные операторы, чтобы повторить поиск.
Для получения дополнительной информации по этому вопросу см
:help \%c
и:help \%v
.источник