Все никак не могу понять, а можно-ли стандартную какую-нибудь клавишную привязку переназначить на свой вкус? Вот например, в визуальном режиме выделения строки (SHIFT-V) когда что-то выделяешь, если нажать на CTRL-D, то курсор становится на страницу вниз и за ним выделяется весь текст. Мне это даром не нужно, я обычно выделяю тупо через SHIFT-V и потом соотвественно J/K, а комбинацией CTRL-D хотелось бы закомментировать выбранные строки... То есть, что-то типа этого:
vmap CTRL-D i/* <ESC>ea */<ESC>
Переназначить стандартные комбинации
Модератор: /dev/random
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: Переназначить стандартные комбинации
1) CTRL-D -> <C-d>
2) у вас используются i и a, которые в визуальном режиме, естественно, не работают. Используйте :s/.../.../
2) у вас используются i и a, которые в визуальном режиме, естественно, не работают. Используйте :s/.../.../
Re: Переназначить стандартные комбинации
О втором пункте как-то не особо задумался, извиняюсь за кривизну рук А вот первый не очень понятен, то есть чтобы переназначить стандартное CTRL-D (ну, например в нормальном режиме), то достаточно замаппить его на <C-D>?
Re: Переназначить стандартные комбинации
Нет, имеется ввиду, что сочетание клавиш Ctrl+D записывается как <C-d>, а не как CTRL-D.
Re: Переназначить стандартные комбинации
Здравствуйте! Как по-вашему, почему не удаётся применить назначенную комбинацию imap <C-Space> <C-^> (перекл. языка) во время работы команды r ? В инсерт-режиме работает, но очень нужно в режиме замены.
Заранее спасибо!
Заранее спасибо!
Re: Переназначить стандартные комбинации
Нет. В отличие от различных операторов (например, y), после которых идёт т.н. operator-pending режим, после r технически никакого режима не идёт. Возможны способы обхода:
1. Использовать getchar() и maparg() (я не знаю, почему, но если просто трогать iminsert, то ничего не работает. Скорее всего, после r идёт что-то более сложное, чем getchar() и, соответственно, символ превращается во что-то другое до попадания оператору.):
(Created by format.vim)
function! Replace()
let char=getchar()
if type(char)==type(0)
let char=nr2char(char)
endif
if char==#"\<C-^>"
let &iminsert=!&iminsert
return Replace()
endif
if &iminsert && !empty(maparg(char, 'l'))
let char=maparg(char, 'l')
endif
return 's'.repeat(char, v:count1)."\e"
endfunction
nnoremap <expr> r Replace()
2. Использовать nnoremap r<C-^> i<C-^><Esc>r (но при этом вводить <C-^> придётся довольно быстро).
3. Использовать другую команду для замены на русский текст (например, моё дополнение translit3 определяет команду \tr).
Спасибо сказали:
Re: Переназначить стандартные комбинации
Получается только ^^, как ни переставляй.
ZyX писал(а): ↑14.02.2011 23:051. Использовать getchar() и maparg() (я не знаю, почему, но если просто трогать iminsert, то ничего не работает. Скорее всего, после r идёт что-то более сложное, чем getchar() и, соответственно, символ превращается во что-то другое до попадания оператору.):
(Created by format.vim)
function! Replace() let char=getchar() if type(char)==type(0) let char=nr2char(char) endif if char==#"\<C-^>" let &iminsert=!&iminsert return Replace() endif if &iminsert && !empty(maparg(char, 'l')) let char=maparg(char, 'l') endif return 's'.repeat(char, v:count1)."\e" endfunction nnoremap <expr> r Replace()
Это работает чудесно, слов нет! Даже можно привыкнуть к прыганью курсора в ком. строку.
И, заменив char на C-Space, работает. Ещё одна мечта сбылась, спасибо!
________________________________________________________________________
Это, наверно, стоит донести до общественности. С такой формулировкой:
возможность переключения языка ввода во время работы команды r.
И добавить в прикреплённую тему.