Как мне работать с очень длинными строками в тексте (500+ символов)?

19

Для некоторых текстовых форматов переносы строк имеют значение.

Например, я часто использую Vim для написания документов MediaWiki, где вы не можете просто поместить перенос строки где-либо (в отличие от Markdown). Поэтому я вынужден писать строки с большим количеством символов.

Это может привести к длинным (более 200 символов) или даже очень длинным (более 1000 символов) линиям. Я нахожу это очень неудобным для использования в Vim. Одним из примеров является то, что если я хочу что-то отредактировать в середине строки из 1000 символов, мне нужно переместить курсор 500 раз.

Это можно сделать немного быстрее с помощью wили /, но это все еще неудобно.

Есть ли лучшие способы справиться с этим? Лучше движение клавиш? Какая-то «фальшивая обертка» (текст ведет себя так, как будто tw=80, но нет \nв файле), или что-то еще?

Мартин Турной
источник
1
Вы также можете установить display = lastline, чтобы избежать пустых @ строк в конце экрана.
Random832

Ответы:

21

Вы можете использовать gряд команд для перемещения к границам видимой области экрана. Например, g$перемещается к правому краю экрана (который не обязательно является концом строки). gjперемещает курсор вниз на одну строку так, как он отображается на экране (что не обязательно на одну логическую строку вниз).

Возможно, вы могли бы привязать клавиши со стрелками:

nnoremap <Up> gk
nnoremap <Down> gj

Или некоторые люди также напрямую перепривязывают kи j:

nnoremap k gk
nnoremap j gj

Для режима вставки вы можете использовать:

inoremap <C-k> <C-o>gk
inoremap <C-j> <C-o>gj

Или:

inoremap <Up> <C-o>gk
inoremap <Down> <C-o>gj

Кроме того, если вы используете :set wrap, Vim обернет строки, чтобы вы могли видеть все строки. Вы также можете использовать, set showsbreak=+чтобы показать, +что Vim выполняет перенос.


Чтобы перейти к определенным позициям столбца, вы можете использовать |команду. Например, 200|перейдем к позиции столбца 200.

200_success
источник
1
... и g5jпрыгнуть на 5, как обычно.
лет»
1
@yo 'Думаю, ты имеешь в виду5gj
Martin Tournoij
1
@Carpetsmoker Strange; с большинством команд не имеет значения, в каком порядке вы даете префиксы и цифры, пока сама команда является последней. Здесь это не: - /
лет
@yo», ну, в g5j, g5видно , первый, который просто переходит к следующему , 5прежде чем применять j. Вот почему он не может делать то, что 5gjделает.
Шахбаз
3

Vim поддерживает мягкую упаковку, просто set wrapчтобы включить ее, и она будет переносить длинные строки, выходящие за пределы видимого экрана. Вы можете использовать gj& gkдля перемещения вверх / вниз по таким обернутым линиям.

Дхрува Сагар
источник
2

Когда я имею дело с очень длинными линиями, самая большая болевая точка связана с различными длинами линий. Таким образом, перемещение вверх или вниз по концам линий прокручивает окно очень далеко влево или вправо.

Этого можно избежать с помощью настройки virtualedit=all, которая позволяет перемещать курсор в пространство намного позже окончания строки.

superjer
источник
1

Как уже говорили другие, вы можете использовать g+ что-то для перемещения. Однако, когда у вас очень длинные строки, нажатие gjнесколько раз для перемещения вниз не эргономично. У меня есть следующее, .vimrcчтобы сделать это намного проще:

vmap <D-j> gj
vmap <D-k> gk
vmap <D-4> g$
vmap <D-6> g^
vmap <D-0> g^
nmap <D-j> gj
nmap <D-k> gk
nmap <D-4> g$
nmap <D-6> g^
nmap <D-0> g^

На Mac это позволяет мне использовать j, k, $, 0 и ^ в строках дисплея, удерживая клавишу Command. На других системах вместо Dвас можно было бы попробовать Mлибо Aдля Alt, либо Cдля Control.

Янош
источник