Mapping-стрелки для выбора символов / линий

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

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

6 ответов


Vim не склоняется к этому легко, на мой взгляд. Терминал один даже не распознает сдвиг вверх в моем случае! Я думал 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

Я завершил отображение @escrafford с помощью режима вставки:

" 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 просить.


немного отличается от ответа progo - это дает то же самое ощущение, что обычно имеют приложения 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>

различия переключаются в визуальный режим вместо визуального линейного режима и не теряют начального нажатия клавиши up/down etc.


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


для этого есть конкретный вариант: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

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