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
будет выбрать следующее слово. Есть еще много команд, которые можно использовать для выбора различных строк и слов. Изучение этих команд будет полезно не только для выбора, но и для более эффективного редактирования файлов.