Як я маю справу з дуже довгими рядками в тексті (500+ символів)?


19

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

Наприклад, я часто використовую Vim для написання документів MediaWiki, де ви не можете просто поставити рядок рядків куди завгодно (на відміну від Markdown). Тому я змушений писати рядки з великою кількістю символів.

Це може призвести до довгих (200+ символів) або навіть дуже довгих (1000+ символів) ліній. Я вважаю це дуже незручним для використання у Vim. Один із прикладів - якщо я хочу щось відредагувати посеред рядка 1000 символів, мені потрібно перемістити курсор в 500 разів.

Це може бути трохи швидше wабо /, але це все-таки незручно.

Чи є кращі способи впоратися з цим? Кращі клавіші руху? Якесь "фальшиве обгортання" (текст веде себе так, ніби tw=80, але \nу файлі немає), чи щось інше?


1
Ви також можете встановити параметр display = lastline, щоб уникнути порожніх рядків @ у кінці екрана.
Випадково832

Відповіді:


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.


1
... і g5jстрибати на 5 вниз, як зазвичай.
yo '

1
@yo 'Я думаю, ти маєш на увазі5gj
Martin Tournoij

1
@Carpetsmoker Strange; для більшості команд не має значення, в якому порядку ви даєте префікси та числа, доки сама команда остання. Тут це не так: - /
yo '

@yo ', ну, в g5j, g5видно перше, яке просто переходить до наступного, 5перш ніж застосувати j. Ось чому він не може робити те, що 5gjробить.
Шахбаз

3

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


2

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

Цього можна уникнути, встановивши налаштування virtualedit=all, що дозволяє переміщувати курсор у простір задовго після закінчення рядка.


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 і ^ у рядках відображення, утримуючи командну клавішу. В інших системах замість Dвас можна спробувати Mабо Aдля Alt, або Cдля Control.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.