Горизонтальная навигация в длинных строках

Как я могу сделать следующее:

  1. смещайтесь быстрее вправо, что-то вроде zw (аналогично zl, но перескакивает через слова)
  2. сдвиньте только одну длинную строку, где находится курсор. Остальная часть файла останется на своем месте

У меня есть .vimrc настройки set nowrap. Это потому, что код выглядит лучше, чем строки с переносом. Но есть проблема с горизонтальной навигацией.

Я заметил, что zl (не путайте l (L) с 1) ярлык, который смещается вправо (zh влево).


person xralf    schedule 13.05.2011    source источник
comment
Я полагаю, вы видели zL (сдвиг на половину ширины экрана вправо) и 6zl (сдвиг на 6 символов вправо). Что касается вашего второго вопроса, я не знаю, как настроить вид отдельных строк.   -  person neillb    schedule 13.05.2011
comment
@neillb Спасибо, zL и zH великолепны. Второй вопрос сложнее.   -  person xralf    schedule 13.05.2011


Ответы (5)


Вы пробовали :help scroll-horizontal?

Вы можете использовать сопоставление для прокрутки, например, на 20 символов влево или вправо:

map <C-L> 20zl " Scroll 20 characters to the right
map <C-H> 20zh " Scroll 20 characters to the left

Не применяя сопоставление, вы можете использовать zL, чтобы переместить представление на половину ширины экрана вправо, и zH, чтобы сделать это влево.

Что касается второй части вашего вопроса: я не думаю, что это возможно. Вы можете выдернуть всю строку, вставить ее во второй (чистый) буфер и прокрутить там. Это будет работать, пока вы просто читаете строки. Проблемы возникнут, как только вы захотите что-то изменить. Но это довольно громоздко...

person eckes    schedule 13.05.2011
comment
Второй буфер - хорошая идея. И достигает того, что я хочу, я использовал для этого :sp. - person xralf; 14.05.2011
comment
set nowrap требуется - person cdosborn; 28.05.2017
comment
zL и zH у меня не работают. что может происходить? - person nilon; 22.07.2017
comment
@nilon Ваш курсор должен быть на длинной строке. - person exic; 18.07.2019

добавляя к другим ответам, также обратите внимание на ze и zs, что означает: переместить экран влево/вправо от курсора

ниже я вставляю свою мнемонику для прокрутки также смотрим на положение h и lt и b) на клавиатуре, чтобы запомнить куда движется экран

+-------------------------------+
^                               |
|c-e (keep cursor)              |
|H(igh)             zt (top)    |
|                   ^           |
|           ze      |      zs   |
|M(iddle)  zh/zH <--zz--> zl/zL |
|                   |           |
|                   v           |
|L(ow)              zb (bottom) |
|c-y (keep cursor)              |
v                               |
+-------------------------------+
person eli    schedule 09.03.2020

Используйте Shift + клавиши прокрутки, чтобы быстрее перемещаться по тексту

person Tariq Kamal    schedule 21.07.2015
comment
Разве это не эквивалент использования w и b? - person shaahiin; 10.12.2018
comment
Да, это. Это еще один способ горизонтальной и вертикальной навигации в редакторе vi/vim. - person Tariq Kamal; 10.12.2018

Для первой части вашего вопроса, как и в комментариях, zL и zH идеально подходят, поэтому я добавлю это сюда.

zL          Move the view on the text half a screenwidth to the
            right, thus scroll the text half a screenwidth to the
            left.  This only works when 'wrap' is off.

zH          Move the view on the text half a screenwidth to the
            left, thus scroll the text half a screenwidth to the
            right.  This only works when 'wrap' is off.
person exic    schedule 18.07.2019

Для более удобной прокрутки, похожей на режим прокрутки, запускаемый ctrl-x,ctrl-e или ctrl-x,ctrl-y в режиме вставки, вот что я добавил в свой vimrc:

nnoremap <silent> zh :call HorizontalScrollMode('h')<CR>
nnoremap <silent> zl :call HorizontalScrollMode('l')<CR>
nnoremap <silent> zH :call HorizontalScrollMode('H')<CR>
nnoremap <silent> zL :call HorizontalScrollMode('L')<CR>

function! HorizontalScrollMode( call_char )
    if &wrap
        return
    endif

    echohl Title
    let typed_char = a:call_char
    while index( [ 'h', 'l', 'H', 'L' ], typed_char ) != -1
        execute 'normal! z'.typed_char
        redraws
        echon '-- Horizontal scrolling mode (h/l/H/L)'
        let typed_char = nr2char(getchar())
    endwhile
    echohl None | echo '' | redraws
endfunction

Таким образом, вы можете прокручивать плавно (с помощью h или l) или быстро (с помощью H или L) по своему усмотрению, не нажимая z снова и снова каждый раз. Вы просто нажимаете z один раз, чтобы запустить «режим горизонтальной прокрутки», который останавливается, как только вы нажимаете любую другую клавишу.

person Bouty    schedule 28.01.2020