【问题标题】:IdeaVim and russian layoutIdeaVim 和俄罗斯布局
【发布时间】:2013-07-28 03:09:24
【问题描述】:

有没有什么方法可以让 IdeaVim 在 Input 以外的模式下理解俄罗斯的布局?在我的 .vimrc 我有

set keymap=russian-jcukenwin

所以我可以通过按 Ctrl+^ 在 VIM 中切换语言,并且对此感到相对满意。但似乎 IdeaVim 没有阅读或理解此设置。停止用俄语输入一些东西(例如评论),切换到命令模式并卡住可能非常烦人。有什么解决方法吗?

【问题讨论】:

    标签: vim keyboard-layout ideavim


    【解决方案1】:

    您可以安装FcitxIdeaVimExtension

    将以下行添加到您的~/.ideavimrc

    set keep-english-in-normal-and-restore-in-insert
    

    IDE在普通模式下会切换到英文,在插入模式下会恢复之前的输入语言。

    在 Ubuntu Gnome 上安装和配置 Fcitx (Fcitx - ArchWiki):

    1. 使用sudo apt install fcitx 安装
    2. 创建~/.pam_environment 文件,内容如下:
    XMODIFIERS DEFAULT=@im=fcitx
    GTK_IM_MODULE DEFAULT=fcitx
    QT_IM_MODULE DEFAULT=fcitx
    
    1. 添加启动应用程序:

    1. 安装Input Method Panel Gnome 扩展。

    对于 Vim,您可能需要安装 fcitx.vim 插件。

    【讨论】:

      【解决方案2】:

      首先我尝试在gist 中使用langmap,但IdeaVim 不支持langmap

      接下来我尝试使用map,所以我提出了这个解决方案:

      let rumap = 'йцукенгшщзхъфывапролджэёячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ'
      let enmap = 'qwertyuiop[]asdfghjkl;''\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>' 
      let mapLen = strchars(rumap)
      let i = 0
      while i < mapLen
          let ruChar = matchstr(rumap, ".", byteidx(rumap, i))
          let enChar = enmap[i]
          "echo 'map '.ruChar.' '.enChar
          execute 'map '.ruChar.' '.enChar
          execute 'cmap '.ruChar.' '.enChar
          let i += 1
      endwhile
      
      map Ё \|
      cmap Ё \|
      

      您可以根据自己的键盘布局对其进行自定义。

      但我忘记了 IdeaVim 不支持 vimscript 和 cmap,我添加了 echo 'map '.ruChar.' '.enChar(注释行),将上面的代码附加到 .vimrc 并从命令行打开 vim,所以它打印了我所有的 map 命令.我将它们添加到 .ideavimrc 并附加了管道 (|) 字符的映射:

      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 ё \
      map я z
      map ч x
      map с c
      map м v
      map и b
      map т n
      map ь m
      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 Ю >
      map Ё /|
      

      现在我让 IdeaVim 在正常、视觉+选择和操作符挂起模式下使用西里尔文布局。

      【讨论】:

      • 谢谢,它对我有用!嗯,差不多。我意识到像ciwdaw 这样的组合仍然不起作用。看起来 ia 在用作“内部”和“周围”时处理不正确。有什么想法可以解决这个问题吗?
      • 这些组合对我也不起作用:(我还没有找到解决方案。如果你愿意,请在此处发布。
      • 非常感谢!我补充说编码应该是 ANSI
      【解决方案3】:

      别忘了!简短的回答是否定的,没有解决方法。除非你愿意修改 IdeaVim。

      当一个键被按下时,人们可以获得关于该事件的不同信息。对于我们的案例,最有趣的部分是 hardware key codekey value。前者对于sыі是相同的,它们位于同一个键上;后者因布局而异。由于 IdeaVim uses key values 用于绑定(并且在设置中动作也绑定到键值),因此在使用键值不同的布局时无法触发动作。因此,例如,它将在德国布局中运行良好。

      无论如何,我建议您避免使用俄语编写 cmets。

      【讨论】:

        猜你喜欢
        • 2010-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多