[typing Russian characters in vim with vim-LaTeX]

37 views
Skip to first unread message

Maxim Abalenkov

unread,
Jun 30, 2020, 1:46:30 AM6/30/20
to v...@vim.org
Dear all,

I hope all is well with you. This is my first post to the vim mailing list. I use vim for a long time and would consider myself a power user. Occasionally, I need to type documents in Russian in LaTeX format. To use Russian in vim I follow the guidelines from this Habr post (https://habr.com/ru/post/98393/). In short I have the following settings in my .vimrc file:

  set keymap=russian-jcukenmac
  set iminsert=0
  set imsearch=0
  highlight lCursor guifg=NONE guibg=Cyan

With these settings in place I can use “Ctrl+^” to switch between English and Russian languages in vim insert mode. For convenient typing of LaTeX commands in vim I use the Vim-LaTeX distribution (https://sourceforge.net/projects/vim-latex/). The configuration commands relevant to vim-LaTeX in my .vimrc are:

  " envoke LaTeX-Suite on TeX file open
  filetype plugin on

  " load filetype-specific indent files
  filetype indent on

  " load vim-latex for empty TeX files
  let g:tex_flavor='latex'

All is nice and well and I’m satisfied with this setup. However, there is one small problem that makes my life miserable. One of the Russian letters, the small letter «ю», is not typed correctly. When I press the relevant key on the keyboard I get a full stop symbol «.» instead of the small letter «ю». On the other hand, the capital letter «Ю» (when pressing the Shift key) is produced correctly. Would you please be so kind to help me debug the problem? Maybe I have some option clashes with the vim-LaTeX? Thank you and have a good day ahead!

Best wishes,
Maxim

Maxim Abalenkov \\ maxim.a...@gmail.com
+44 7 486 486 505 \\ http://mabalenk.gitlab.io

Tony Mechelynck

unread,
Jun 30, 2020, 2:20:20 AM6/30/20
to vim_use
When keymaps are active, the "russian-jcukenmac" keymap ought to produce the letter ю when you hit what would be a full stop when keymaps are not active, and a full stop when you hit the key which otherwise would give &. I suggest the following:

1. Make the cursor be of a diferent color when typing Russian:
       hi Cursor ctermbg=bg ctermfg=fg guibg=bg guifg=fg
       hi lCursor ctermbg=red ctermfg=red guibg=#FF0000 guifg=#FF0000
2. Check your mappings:
       :verbose map! .
       :verbose lmap .

(with the full stop at the end in both cases). If all is right, I would expect the answers to be
  No mapping found
and
  . . *@ю
respectively, with possibly an additional ine telling you where the mapping was set.

You can also try test-typing some mixed Cyrillic/Latin text and check that the cursor is red for Cyrillic and "normal" for Latin.

Всего хорошего,
Тоня.

Andy Wokula

unread,
Jul 1, 2020, 12:32:24 PM7/1/20
to vim...@googlegroups.com
> Maxim Abalenkov \\ maxim.a...@gmail.com <mailto:maxim.a...@gmail.com>
> +44 7 486 486 505 \\ http://mabalenk.gitlab.io

This assumes vim-latex-1.10 ...


The keymap's (buffer-local) language mapping for `.' is overruled by a
buffer-local Insert mode mapping.


To show the problem: in a LaTeX (ft=tex) buffer:
:imap <buffer> .
(or just)
:imap .
shows something like (depending on g:Tex_SmartKeyDot)
<C-R>=<SNR>20_SmartDots()<CR>
or <C-R>=<SNR>12_LookupCharacter(".")<CR>


You can remove the Insert mode mapping after it gets defined:

Create a file
after/ftplugin/tex.vim
containing the line

iunmap <buffer> .

for example the file ~/.vim/after/ftplugin/tex.vim where
~/.vim/after must occur in the 'runtimepath'.

--------------------------------------------------------------
You can ignore what follows.

An alternative is to

put in the vimrc:
:let g:Tex_SmartKeyDot = 0

and to put in the after/ftplugin/tex.vim file:

" :echo IMAP_list_all('.')
" tex: "`. => "`.
" tex: \`. => \`.
" tex: ``. => ``.
" tex: `. => \cdot

if exists('*IUNMAP') && maparg('.', 'i') =~# '<SNR>\d\+_LookupCharacter("\.")'
call IUNMAP('"`.', 'tex')
call IUNMAP('\`.', 'tex')
call IUNMAP('``.', 'tex')
call IUNMAP('`.', 'tex')
endif


Would have been cleaner if there was an IUNMAP_ALL('.', 'tex') function ...

And not sure about the exact consequences ... the mapping for `.' is
created per buffer, but IMAP() creates internal data structures per
filetype.

--
Andy

Maxim Abalenkov

unread,
Jul 5, 2020, 3:32:40 PM7/5/20
to vim...@googlegroups.com
Hello Tony et al.,

How are you? Thank you very much for your help. I’m sorry for a delay in my reply. It has been a busy week! I have just tried your suggestions. I have placed the cursor highlight settings into my ~/.vimrc by they don’t appear to have any effect. The colour of the cursor doesn’t change neither in Latin nor in Russian setting.

I have checked the mappings and have something to report back to you.

       :verbose map! .

Produces:

*@<C-R>=<SNR>43_SmartDots()<CR>
        Last set from ~/Dropbox/unix/.vim/ftplugin/latex-suite/main.vim line 865
i  .           * <C-R>=<SNR>22_LookupCharacter(".")<CR>
        Last set from ~/Dropbox/unix/.vim/plugin/imaps.vim line 184

       :verbose lmap .

Results in:

l  .           *@ю
        Last set from /usr/share/vim/vim82/keymap/russian-jcukenmac.vim line 95

All in all it is working now. I figured out my mistake. The conflict was indeed the vim-LaTeX and the Russian keymap settings. I have asked this question on Vim StackExchange (https://tinyurl.com/y9sg3caz). The order of loading vim-LaTeX and Russian keymap was incorrect. To solve the issue I’m loading the Russian keymap first and setting the vim-LaTeX options the last. Thank you for your help and have a good Sunday!
Reply all
Reply to author
Forward
0 new messages