文本编辑器

举报
满心 发表于 2021/03/09 09:50:26 2021/03/09
【摘要】 多年以来,我已经习惯了使用 Vim,以至于我的思维方式都习惯了 Vim。工作时,我只需要使用键盘专心致志地工作,因为我的注意力都集中在当前的输入上。另外,我已经习惯了 Emacs 的设置,而且特别依赖于 Vim 模拟和各种稀奇古怪的小设置。我努力尝试在 Windows 上使用同样的 Emacs 设置(并去掉一些显然不可能的操作,比如在 Windows 上使用 Nix 等),但很快我就发现,这...

多年以来,我已经习惯了使用 Vim,以至于我的思维方式都习惯了 Vim。工作时,我只需要使用键盘专心致志地工作,因为我的注意力都集中在当前的输入上。另外,我已经习惯了 Emacs 的设置,而且特别依赖于 Vim 模拟和各种稀奇古怪的小设置。

我努力尝试在 Windows 上使用同样的 Emacs 设置(并去掉一些显然不可能的操作,比如在 Windows 上使用 Nix 等),但很快我就发现,这完全是在浪费时间。将 Linux/macOS 的配置改成 Windows 需要修改的地方太多了。算了,我还是直接使用 VSCode 吧。它在 NixOS 上运行良好,所以在 Windows 上应该问题不大吧?

Vim 模拟

首先我安装了 Vim 插件 vscodevim。安装好插件后,我打开了一个文件夹。用 :open 可以打开一个文件然后进行输入。然后,我想使用 :vsplit 垂直打开另一个文件,于是我输入了:vsplit bar.txt,结果当前窗口却被垂直分割了,而不是在垂直分割的窗口中打开我需要的文件。当然,这也许是我非常习惯的另一个技巧而已(尽管这个行为在原版vim上非常好用),我询问过的其他人都不这么用(甚至有人完全不知道这个命令还能这么用),但这个动作已经深入了我的肌肉记忆,因此丧失这种用法让我倍感沮丧。我不得不重新训练十多年的肌肉记忆。

whichwrap

Vim 有一个叫做 whichwrap 的功能,当光标移动到行尾或行首时,可以使用方向键将光标移动到下一行的行首,或上一行的行尾。我从 2013 年 11 月就在 Vim 中加入了这个设置,然后甚至忘了自己曾经加过这个设置,以至于我以为这是 Vim 的默认行为。

但是,很显然我错了。

要想改正这个问题,只能在 VSCode 的 settings.json 中加入下面这一行:

{  "vim.whichwrap""h,l,<,>,[,]"}

很烦人,但至少可以正常使用。

删除寄存器 != 剪贴板

Vim 中有寄存器的概念,有命名和未命名之分,近似于大多数桌面环境中的剪贴板,在我的 Emacs 设置中,剪贴板和删除寄存器是一样的。如果复制一大段文字到删除寄存器中,实际上就是放到剪贴板中。如果我向剪贴板中放入一些内容,实际也会自动放到删除寄存器中。这个操作其实非常方便。

然而这并不是 vscodevim 中的默认操作,不过有个选项可以实现这一点:

{    "vim.useSystemClipboard"true}

这样删除寄存器就与我想象的一样了。

插件的加载顺序

Emacs 可以控制插件的加载顺序。如果需要在语言支持插件加载之前加载项目本身的插件,这个功能就会非常有用,这样可以保证在语言服务器运行之前设置正确的环境变量。

据我所知,VSCode 无法配置这一点。在某个项目中我必须禁用 Go 插件并重载 VSCode,等待 direnv 设置生效之后,再重新启用 Go 插件。如果能指定插件加载顺序,实现这一点就非常容易,但显然 VSCode 不允许你控制加载顺序。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。