Отображение <Shift> -Arrows для выбора символов/строк

Я начал использовать vim в последнее время, но я пропускаю методы выбора символов/строк из других текстовых редакторов. По умолчанию vim отображает <S-Up>, <S-Down>, чтобы переместиться на одну страницу вверх/вниз, и я хочу переназначить их на выбор текста.

Есть ли способ сделать это?

Ответы

Ответ 1

Вим не сгибает это легко, на мой взгляд. Терминал в моем случае даже не распознает Shift-Up! Я думал, что v (выбор символов) или v (линейный выбор) был среди более простых понятий, чтобы узнать о vi/vim.

Если это работает (невозможно проверить прямо сейчас), это то, что вам нужно:

" activate visual mode in normal mode
nmap <S-Up> V
nmap <S-Down> V
" these are mapped in visual mode
vmap <S-Up> k
vmap <S-Down> j
" 
" etc...
" similarly <S-Left>, <S-Right> for v

Ответ 2

Немного отличается от ответа на запрос - это дает то же ощущение, что и у Mac-приложений:

nmap <S-Up> v<Up>
nmap <S-Down> v<Down>
nmap <S-Left> v<Left>
nmap <S-Right> v<Right>
vmap <S-Up> <Up>
vmap <S-Down> <Down>
vmap <S-Left> <Left>
vmap <S-Right> <Right>

Разница заключается в переключении на визуальный режим вместо визуального режима линии, а не на потере начального нажатия вверх/вниз и т.д.

Ответ 3

Я завершил сопоставление @escrapfford со вставками:

" shift+arrow selection
nmap <S-Up> v<Up>
nmap <S-Down> v<Down>
nmap <S-Left> v<Left>
nmap <S-Right> v<Right>
vmap <S-Up> <Up>
vmap <S-Down> <Down>
vmap <S-Left> <Left>
vmap <S-Right> <Right>
imap <S-Up> <Esc>v<Up>
imap <S-Down> <Esc>v<Down>
imap <S-Left> <Esc>v<Left>
imap <S-Right> <Esc>v<Right>

Также, сопоставляя обычную копию/вырезание/вставку, вы можете вернуться в режим вставки после выбора + копирования, например.

vmap <C-c> y<Esc>i
vmap <C-x> d<Esc>i
map <C-v> pi
imap <C-v> <Esc>pi
imap <C-z> <Esc>ui

Теперь вы можете начать выбор shift + стрелки из любого режима, затем C-c для копирования, а затем C-v для вставки. Вы всегда заканчиваете режим вставки, поэтому у вас также есть C-z для отмены.

Я думаю, что это больше подходит для поведения "ожидаемого стандарта" для текстового редактора, который задают yu.

Ответ 4

Я нашел другое решение, которое проще выполнить. Команда ': behave mswin' делает все, что необходимо для использования клавиш shift + cursor для выбора текста. Работает из любого режима. Он также поддерживает Cmd-c, Cmd-v и Cmd-x. Он работает в MacVim, но я не пробовал другие платформы.

Ответ 5

Настоятельно рекомендуется не переназначать эту функцию. Простое переключение в визуальный режим и использование v, а клавиши со стрелками - лучшая идея. v выберет всю строку, v$ выберет до конца строки, а vw выберет следующее слово. Есть много других команд, которые вы можете использовать для выбора разных строк и слов. Изучение этих команд будет полезно не только для выбора, но и для более эффективного редактирования файлов.

Ответ 6

Здесь определенная опция: keymodel:

'keymodel' 'km'     string  (default "")
            global
            {not in Vi}
    List of comma separated words, which enable special things that keys
    can do.  These values can be used:
       startsel Using a shifted special key starts selection (either
            Select mode or Visual mode, depending on "key" being
            present in 'selectmode').
       stopsel  Using a not-shifted special key stops selection.
    Special keys in this context are the cursor keys, <End>, <Home>,
    <PageUp> and <PageDown>.
    The 'keymodel' option is set by the |:behave| command.

TL; DR. Чтобы включить нужное поведение, используйте:

set keymodel=startsel

Если вы также хотите оставить визуальный режим при использовании <Up> или <Down> без нажатия <Shift>, вы можете использовать:

set keymodel=startsel,stopsel