Я решил использовать gvim в качестве основного текстового редактора, но все же хотел бы, чтобы он вел себя как другие визуальные редакторы, к которым я привык. Одним из аспектов этого является то, что когда я включил перенос (set linebreak
) и использую клавиши со стрелками <Up>
и <Down>
в режиме вставки, я хотел бы переместить курсор на предыдущую/следующую строку экрана, а не логическая линия. Это может быть достигнуто с помощью отображений:
inoremap <Up> <C-O>gk
inoremap <Down> <C-O>gj
... и все в порядке.
За исключением режима выбора. При использовании <S-Right>
<S-Left>
работает как положено, <S-Up>
и <S-Down>
по-прежнему перемещаются с точки зрения логических строк. На http://vim.wikia.com я нашел следующее предложение по дополнительным сопоставлениям:
noremap <S-Up> vgk
noremap <S-Down> vgj
inoremap <S-Up> <C-O>vgk
inoremap <S-Down> <C-O>vgj
Два последних сопоставления теперь позволяют, когда я начинаю выделение, нажимая <S-Down>
в режиме вставки, я получаю выделение из предыдущей позиции в ту же позицию в следующей строке экрана. Но когда у меня уже есть выделение (уже нахожусь в режиме выбора), нажатие <S-Down>
перемещает на одну строку вниз, но теряет выделение.
Я ожидал, что для этого потребуется специальное сопоставление для режима выбора (snoremap
), но я не смог понять, как это сделать.
Из-за дискуссии с glts о том, бесполезен ли режим выбора или нет, возможно, некоторая справочная информация уместна: режим выбора, по-видимому, является попыткой vim обеспечить что-то близкое к поведению выбора, используемому в большинстве других визуальных редакторов в MS Windows, Mac OS, и даже Linux, который, в свою очередь, основан на CUA от IBM. Поскольку он действительно полезен только с сопутствующими раскладками клавиатуры ^C, ^X, ^V, он предназначен для использования в сочетании с mswin.vim
, который обеспечивает эти сопоставления. Мой вопрос мотивирован попыткой дополнить эти сопоставления таким образом, чтобы режим выбора работал должным образом и для обернутого текста.
:xnoremap
. - person glts   schedule 08.09.2013:xnoremap
предназначен специально для визуального режима,:vnoremap
предназначен как для визуального режима, так и для режима выбора, что вряд ли когда-либо подходит.:h mapmode-x
имеет предупреждение о возможной путанице. - person glts   schedule 08.09.2013