LINUX.ORG.RU

Vim. Назначение горячих клавиш кириллицей.

 


1

3

Привет всем!

Обращаюсь к тем, кто помнит, как настраивать Vim. Подскажите пожалуйста способ (ну, или киньте ссылкой) как в конфиг Vim прибить кооректную обработку командных комбинаций клавиш в русской раскладке.

Давно пишу программы только в Vim. Неутолимое желание текстовые файлы на русском языке тоже набирать в Vim все время спотыкается об элементарную проблему: Ctrl+S. Когда весь текст документа на русском, то во время набора для сохранения документа приходится либо переключать раскладку, либо переходить в командный режим. После 10 минут работы начинает злить.

Пробовал прибить Ctrl+ы по аналогии c

" варианты
" map ы s
" или
" imap <C-ы> <esc>:w<cr>i
" не работают

" Ctrl-S: сохранить изменения
imap <C-s> <esc>:w<cr>i
nmap <C-s> :w<cr>

не работает. Кто-нибудь в курсе?



Последнее исправление: bigov (всего исправлений: 3)

map ё `
map й q
map ц w
map у e
map к r
map е t
map н y
map г u
map ш i
map щ o
map з p
map х [
map ъ ]
map ф a
map ы s
map в d
map а f
map п g
map р h
map о j
map л k
map д l
map ж ;
map э '
map я z
map ч x
map с c
map м v
map и b
map т n
map ь m
map б ,
map ю .
map Ё ~
map Й Q
map Ц W
map У E
map К R
map Е T
map Н Y
map Г U
map Ш I
map Щ O
map З P
map Х {
map Ъ }
map Ф A
map Ы S
map В D
map А F
map П G
map Р H
map О J
map Л K
map Д L
map Ж :
map Э "
map Я Z
map Ч X
map С C
map М V
map И B
map Т N
map Ь M
map Б <
map Ю >

просто вставь это в .vimrc и все русские буквы вим начнет воспринимать как хоткеи в английской раскладке.

Spoofing ★★★★★
()
Ответ на: комментарий от Spoofing

Спасибо, я уже пробовал это. Совет описан на https://ru.wikibooks.org/wiki/Vim. Я туда в первую очередь заглянул. Но ввод «Ctrl+ы» в режиме вставки у меня (Archlinux + gvim 7.4.854) в режиме вставки уверенно печатает символ «ы», а как команда не воспринимается.

bigov
() автор топика

" Ctrl-S: сохранить изменения
imap <C-s> <esc>:w<cr>i
nmap <C-s> :w<cr>

у меня на маке работает, сейчас загружусь в линукс попробую, кстати это конечно вопрос личного удобства и предпочтений, но мне куда удобнее делать так:

map <Space> <Leader>
nmap <Leader>w :w!<CR>
конечно, в insert mode я не сохраняюсь, потому что это неправильно.

kep
()

У меня vim по esc переключает раскладку на английскую.
Для сохранения не использую никаких шоткатов, простой :w для меня более чем удобен.

Говорят, есть плагин, который переключает раскладку на дефольтную, а потом возвращает на предыдущую. Я таким не пользовался.

andreyu ★★★★★
()
Ответ на: комментарий от kep

работает без проблем и на линуксе, настройка такая (следуюет соблюдать правильное наименование кнопок с большой буквы, несмотря на то, что в документации указанно, что всё равно, могу привести примеры):

imap <C-s> <Esc>:w<CR>i
nmap <C-s> :w<CR>
причем это при отключеном vim-xkbswitch (работает в паре с xkb-switch), штуке, которая тебе обязательно нужна, раз ты не любишь переключать раскладку, оно автоматически переключает раскладку на английский при переходе в normal mode и автоматически возвращает на ту, что была (например русскую) при возвращении в insert mode, это крайне удобно, проблема переключения раскладок ушла в прошлое, лично моя настройка такова:
Plug 'lyokha/vim-xkbswitch'
let g:XkbSwitchEnabled       = 1
let g:XkbSwitchLib           = '/usr/lib64/libxkbswitch.so'
let g:XkbSwitchIMappings     = ['ru']
let g:XkbSwitchSkipIMappings = {'*' : ['[', ']', '{', '}', "'", '<', '>', ',', '.', '"']}
но я специально отключил его, чтобы проверить работает ли твой маппинг без этого.

Может тебе поможет мой ~/.vimrc — я не исключаю, что возможно где-то кроется загвоздка, почему C-s работает на русской раскладке.

Версия вима у меня: 7.4.884

kep
()
Ответ на: комментарий от Spoofing

не начнет, это треш из каменного века, который не работает, но почему-то многие считают необходимым его перепощивать, почитай мой ответ ТСу.

kep
()
Ответ на: комментарий от kep

по поводу «<Space> <Leader>» - отличный совет. Всегда думал: «может у меня пальцы короткие» - целясь мизинцем на «Ctrl».

bigov
() автор топика
Ответ на: комментарий от bigov

ну Ctrl вообще не на «базе» (если ровно разложить пальцы), а большой палец на пробеле и мизинец на 'w' вообще как родные, кстати крайне рекомендую еще вот такое:

inoremap kj <Esc>
считаю, что это самый удобный хоткей из всех существующих, ведь слов с таким сочетанием нет, но это очень быстро и удобно.

kep
()
Ответ на: комментарий от kep

Спасибо за конфиг, kep! Вечером обязательно покопаюсь - очень много плагинов, которых у меня нет, думаю есть что-нибудь вкусное, чего я не юзаю.

Хотел-бы только уточнить: этот конфиг в OC-Linux в режиме вставки текста (imode) при нажатии «Ctrl+ы» в русской раскладке сохраняет текущий файл, а не печатает букву «ы» в текст. Правильно?

bigov
() автор топика
Ответ на: комментарий от kep

следуюет соблюдать правильное наименование кнопок с большой буквы, несмотря на то, что в документации указанно, что всё равно, могу привести примеры

приведи

salsa
()
Ответ на: комментарий от bigov

Да, правильно, если добавить:

imap <C-s> <Esc>:w<CR>i
nmap <C-s> :w<CR>

kep
()
Ответ на: комментарий от salsa

приведи

из того, что помню, это с silent, но попадались еще:

map <silent> <F4> :colo default<CR>
работает, а это:
map <Silent> <F4> :colo default<CR>
не работает.

silent не кнопка? ну как сказать, так что лучше мапить кнопки согласно их написанию.

kep
()
Ответ на: комментарий от habamax

let mapleader = «\<Space>»

не очень красиво выглядит в конфиге рядом с другими маппингами, и если не изменяет память, то когда пользовался таким, то отгреб однажды одну проблему из-за которой пришлой вернуться к обычному, текущему маппингу.

kep
()
Ответ на: комментарий от kep

silent не кнопка?

Вот именно. <silent> (и другие) — это флаги, но в той же нотации. Все равно, что сравнивать опции с аргументами в шелах(ИМХО).

salsa
()
Ответ на: комментарий от habamax

«Ну-у-у робяты...» Вот вы попробуйте запустить gvim c таким конфигом:

~$ cat vimcfg

"
" vimrc
"

set nocompatible
set wrap
set cursorline
syntax enable
set number

imap <C-s> <Esc>:w<CR>a
nmap <C-s> :w<CR>

set keymap=russian-jcukenwin
set iminsert=0
set imsearch=0

Напоминаю, что запускается командой

 gvim -u vimcfg -- test.txt

И попробуйте сохранить файл (не переходя в командный режим) комбинацией «Ctrl+s». В английской раскладке - сохраняет. В русской печатает букву «ы».

М-м-даа... Видимо придется тупо прибить <F2> как мс.

bigov
() автор топика
Ответ на: комментарий от bigov

М-м-даа... Видимо придется тупо прибить <F2> как мс.

А зачем постоянно сохранять-то? Можно ведь включить swapfile и/или backup.

salsa
()
Ответ на: комментарий от salsa

Спасибо конечно за участие. Я тоже знаю много советов типа: ты делаешь не так, правильно будет так... и т.п. и т.д...

Но КАК ПРАВИЛЬНО я знаю. Мне надо сделать так, как Я ХОЧУ. Иначе зафига нам все эти «опенсорсы и линуксы»? Можно открыть что-то типа «MS-Visual...» и не задавать глупых вопросов. Как-то так.

bigov
() автор топика
Ответ на: комментарий от habamax

как и во всех приложениях - «XFce Keyboard Layouts Plugin». Ибо от внутренних переключалок вима я отказался еще год назад - неудобно.

bigov
() автор топика
Ответ на: комментарий от salsa

(you can get their codes by subtracting 0x40 from their
value), no characters above and beyond this range can be used
together with C-.

Спасибо. Я предполагал что-то типа этого. Все ясно - можно ставить точку.

bigov
() автор топика
Ответ на: комментарий от bigov

Тогда тебе keymap не поможет, как ты его не вставляй в vimrc.

langmap пробовал? У меня очень давно был такой же мэппинг на C-S и по моему он работал с langmapом.

set langmap=ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯЖ;ABCDEFGHIJKLMNOPQRSTUVWXYZ:,
фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz

habamax ★★★
()
Ответ на: комментарий от bigov

Если дело только в сохранении, вдруг вы про swapfile/backup(а заодно и autowrite/autowriteall) не знали, мало ли.

salsa
()
Ответ на: комментарий от habamax

В новых версиях Vim надо так:

set langmap=!\\"№\\;%?*ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ;!@#$%&*`qwertyuiop[]asdfghjkl\\;'zxcvbnm\\,.~QWERTYUIOP{}ASDFGHJKL:\\"ZXCVBNM<>

Да только все равно не прибивает он русские буквы к командам с Ctrl.

bigov
() автор топика
Ответ на: комментарий от salsa

Интересно! Так может кто-нибудь запостить короткий конфиг, чтоб это работало?? А то у kep конфиг на 500 строк с несколькими десятками плагинов - с ним два дня будешь разбираться. Плюс там еще и системные конфиги по умолчанию

   system vimrc file: "/etc/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "/etc/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
2nd user gvimrc file: "~/.vim/gvimrc"
bigov
() автор топика
Ответ на: комментарий от bigov

Так может кто-нибудь запостить короткий конфиг, чтоб это работало??

Могу только подтвердить, что с langmap в gvim не работает.

anonymous
()
Ответ на: комментарий от bigov

У меня

imap <C-s> <esc>:w<cr>i
nmap <C-s> :w<cr>
тоже работает. В терминальном vim(с отключенным flow control). А в gvim — нет. Возможно как раз из-за того, что gvim «use byte queue», а должен «keypress event queue».

kep, ты в gvim пробовал?

salsa
()
Ответ на: комментарий от bigov

учти, что всё, что я говорил касается только терминального vim, гвимом я не пользуюсь и тебе не советую.

kep
()
Ответ на: комментарий от salsa

терминальном vim(с отключенным flow control)

Это что-то вроде этого?

$ cat .bashrc | grep stty
stty stop ^e   # instead of ^s
stty start ^b  # instead of ^q
bigov
() автор топика
Ответ на: комментарий от salsa

Точно!

$ cat .vimrc
 set nocompatible
 imap <C-s> <Esc>:w<CR>a
$
$ stty -ixon
$ /usr/sbin/vim -u .vimrc -- tmp.txt 

Прекрасно мапится «Ctrl+ы». Я в офиге - без langmap, без keymap, и все системные конфиги перед этим были переименованы!

Правда kep сказал про gvim.

bigov
() автор топика

Для подобных вещей я использую функциональные клавиши. Например, сохранение у меня висит на F2.

shell-script ★★★★★
()
Ответ на: комментарий от kep

Да уж! Я вначале тоже только терминальным пользовался. А потом, как на C++ много писать стал, меня перестала устраивать подсветка. Нашел красивую палитру с VGA цветами, ну и «купился» на симпатичную обертку. Эта тема работала только в gvim. Теперь вижу что зазря.

bigov
() автор топика
Ответ на: комментарий от bigov

Нашел красивую палитру с VGA цветами

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

kep
()
Ответ на: комментарий от bigov

В gvim цветов больше, на Alt что-то биндится без лишних проблем, есть gvim-специфичные вещи(вроде balloon) и он менее тормозной с некоторыми опциями(вроде 'cursorline', 'relativenumber' и т.д.).

salsa
()
Ответ на: комментарий от andreyu

Кстати, не плохая идея - вместо того, чтобы мучиться с дополнительными клавишами для переключения языков можно на клавишу <Esc> перед переходом в нормальный режим подвесить запоминание текущей раскладки, а по переходу в режим ввода восстановить. Небольшой плагин, а удобство большое.

bigov
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.