36

我最近一直在学习一些 VIM 黑客技术,我学到了很多有用的命令,并且在使用 VIM 编辑文本方面变得非常高效。我正在使用芬兰的 qwerty 键盘布局(见下图),这对于编程来说非常糟糕。所有你常用的编码特殊字符()[]{}/\都是通过按shiftalt gr和一个number键发生的,但我已经很习惯了。我不想改变我的键盘布局,因为我用我的母语进行了大量的写作和 IRC 聊天,为此我需要äandö字符(这å对我来说没用,只有瑞典人使用它)。

我的问题是一些 VIM 命令在默认情况下具有相当困难的键映射,例如 go-to-tag-under-cursor 是 ^] ,它在芬兰语键盘上转换为Ctrl- AltGr- 。9这需要我left control用左手按下键,alt gr用右手拇指并将右手食指伸到number 9键上。这感觉就像使用 emacs 和/或弹奏古典吉他。不完全符合人体工程学。

这是键盘布局的样子:

瑞典键盘

注意:标记为蓝色的键是通过按AltGr(右 alt)和相应的键写入的。红色的是双键组合字符或死键,它们本身不发出字符。前任 要键入ü字符,请先按¨^~键,然后按u。重音键也是如此。这些死键在 VIM 中是不可映射的。

所以基本上我有 3 个额外的字母键 ( äöå) 可用,但它们不能被多次映射,修饰键不能与它们一起使用(在 VIM 中)。我可以将某些东西映射到ä,但不能Ä<C-ä>

现在我正在从芬兰/瑞典或其他非美国键盘布局用户那里寻找关于我的 VIM 设置的想法。请分享您的键映射、.vimrc 提示和任何其他可能有用的信息。

4

6 回答 6

7

我只是在编码时将键盘保持为美国布局,并且在编写需要重音字母或其他语言特定字符的文本时只切换到本地布局(意大利语)。毕竟它只是一个按键来切换,没有什么比美国的编程布局更好的了。我尝试了一下,但发现指定大量映射来解决这个问题比需要的完整布局切换要麻烦得多。

于 2010-12-08T22:03:31.390 回答
5

我对此的解决方案是我制作了一个自定义键盘布局,它将美国布局的最佳方面结合到芬兰键盘布局中。它的好处是它将更改保持在最低限度,因此实际上不存在学习曲线。

其背后的理念是尽量减少使用 的需求AltGr,同时仍使其尽可能接近标准 Fin 布局。即使在 下方有一些键AltGr,它们都在左侧数字下方,因此您不必在用拇指按住修饰符的同时用右手笨拙地按下它们。

我用来制作布局的程序是适用于 macOS的Ukelele和适用于 Windows 的Microsoft Keyboard Layout Creator。我叫它Finner.keylayout/ Finner.klc

这是它的 GitHub 存储库:https ://github.com/ruohola/finner

这是基本布局(在修饰符下有更多键),更改的键突出显示:

按键布局的图像

于 2019-03-13T12:03:33.327 回答
3

My solution is to use custom mix of US and FIN/SWE layouts. Works quite nicely(or at least better than the horrible fin layout). Image of my layout

That image probably does not have all the characters I do, but most of them anyways.

于 2010-12-08T22:11:25.157 回答
2

您可以在 VIM 中使用 langmap 和 keymap 设置。我用它来做colemak。您可以指定自己的布局。

h keymap
h langmap
于 2010-12-12T14:08:39.733 回答
1

作为一个实际的权宜之计,你能不能简单地在布局之间切换?

例如,在 Ubuntu 中,您可以设置热键以通过转到Preferences → Keyboard → Layouts → Options → Key(s) to change layout. 我使用两个 Shift 键在布局之间快速移动,甚至还有一个选项,以便每个窗口都有自己的布局设置,如果您在编写文档/电子邮件/等时使用美国英语布局在 Vim 中编程,则效果很好。在不同布局的其他窗口中。即使我必须切换布局(用于代码注释等),也只需轻按两个 Shift 按钮即可继续操作。

在其他桌面环境/操作系统中应该有类似的方法来配置它。

于 2010-12-08T22:04:14.883 回答
0

我只是将这些 ctrl- 组合映射到其他键绑定。

例如,ctrl-]映射到meta- down

于 2010-12-09T07:33:31.343 回答