Chienomi

エディタは結局VSCodeに戻った

Live With Linux::software

この記事はLinuxカテゴリです!

本文はLinux上での話をしています

Linuxに関する疑問解消や共有は日本語Linuxers

VSCodeをやめてZedにするぞ!で私はCode OSS/VSCodiumの利用をやめ、Zedに移ったことをお伝えした。

で、ちょっとこの記事が話題になったりしたらしい。

が、私はVSCode (Code OSS)に戻った。

単純に戻したわけではなく、Sublime Codeを試したり、Emacsのセットアップを進めたりと色々やったのだけど、結果としては満足できなかったし、VSCode側の問題が解決したので戻ってきた。

Zedをやめた理由

Ruby拡張がプロジェクトディレクトリを汚すからだ。

ZedのRuby拡張はシステム側を尊重しない、相当お行儀の悪いものなのだけど、なんと.ruby-lspbundleを勝手に作ってしまう。

プロジェクト以下にRubyファイルがあるからといってbundleを受け入れているとは限らないし、.ruby-lspを生やすことが許容されているプロジェクトばかりではないのだが、本当に勝手に、設定の余地もなくそのように動作する。

そして、これにより結構な被害が出た。 リポジトリに意図しないファイルが含まれることを予期していないので、予期せぬ状態になったのだ。回復に相当な手間がかかった。

そして、これは本当に許されない挙動なので、私はZedを使うのをやめた。

他のエディタ

Sublime Textは比較的これらに近いソフトウェアだが、機能がかなり不足していた。

まず、ファイルの検索や置き換えといった機能がかなり弱い。 インデント関係のコントロールも十分ではない。 そして、組み込み端末も拡張で存在はしているものの、端末制御がちゃんと実装されておらず表示がおかしくなる。

また、フォルダ内にNewfileしてもファイルが作られないのも痛い。

全体的に私が求める機能に足りていない。

そしてこれら以外に、そのまま代替できるような機能を持ったソフトウェアはなかった。 Geanyが一番近いが、まず第一歩である「指定したディレクトリをルートディレクトリとしてプロジェクトを開く」ということができない。

複数のアプリケーションを組み合わせることで近い動作はできるのだが、検索・置き換えや素早く開くための操作は難しい。

代わりにEmacsを、と考えたが、素早く切り替えたり並列で進めたりといった手順が従来の形でできなかった。

結局のところ、要求を満たしているのはVSCodeだけで、Zedがギリ我慢できる範囲、ほかはかなり我慢が必要、という結論であった。

そのVSCodeは

さて、そもそもVSCodeを使うのをやめた理由だが、大きいところでは

  • 異様に圧の強いGitHubとの連携
  • Enable: falseにしても消えないAIパネル

という問題なのだが、まずGitHub連携はいつの間にやら組み込まれていたGitHub拡張そのものが廃止になり、代わりのものは組み込みではなくなったので、そもそも標準でGitHubとの連携を求められなくなった。

次に、AIパネルはちゃんと設定を反映するようになっていた。

というわけで、大きい2つの問題がアップデートで「なんか知らない間に解決されていた」になった。

あと、ずっと不快だったテレメトリも完全オフが選択できるようになった。

まぁ、細かい不満はあるにはあるのだけど、前述の通りそもそも要求を満たすのがVSCodeしかないのだし、Zedはとんでもない挙動を持っているのでVSCodeに戻ることにした。

ちなみに設定

こんな感じでだいたい満足できている。

{
    "editor.fontFamily": "'Hermit', 'Twemoji', 'UDTypos510 Std', 'Klee One', 'MesloLGS NF', 'monospace', monospace",
    "editor.fontSize": 18,
    "window.zoomLevel": 2,
    "editor.tabSize": 2,
    "terminal.integrated.shellIntegration.decorationsEnabled": "never",
    "terminal.integrated.shellIntegration.enabled": false,
    "terminal.integrated.fontFamily": "\"MesloLGS NF\"",
    "solargraph.commandPath": "/home/haruka/.local/share/gem/ruby/3.4.0/bin/solargraph",
    "workbench.iconTheme": "catppuccin-macchiato",
    "editor.wordWrap": "on",
    "workbench.colorTheme": "Dracula Theme",
    "terminal.external.linuxExec": "gnome-terminal",
    "terminal.integrated.persistentSessionReviveProcess": "never",
    "workbench.startupEditor": "none",
    "github.branchProtection": false,
    "github.gitAuthentication": false,
    "chat.commandCenter.enabled": false,
    "workbench.secondarySideBar.defaultVisibility": "hidden",
    "chat.disableAIFeatures": true,
    "chat.agent.enabled": false,
    "workbench.settings.showAISearchToggle": false,
    "telemetry.feedback.enabled": false
}

そして生成

VSCodeの設定に関しては環境固有のものもそれなりにあるため、1つの設定ファイルを共有するのは難しい。 けれど、設定項目が増えるとメイン環境をベースにしたほうがいいので、オーバーライド方式で出力するようにした。

#!/bin/ruby
require 'json'

EXCLUDE_KEYS = %w:
  workbench.iconTheme
  workbench.colorTheme
:

def usage
  abort "generate.rb <profile>"
end

profile = ARGV.shift
usage unless profile

settings = JSON.load File.read "settings.json"
override = JSON.load File.read "override/#{profile}.json"

EXCLUDE_KEYS.each {|k| settings.delete k }

puts JSON.pretty_unparse(settings.merge(override))

Code OSSの場合とVSCodiumの場合があるので、ファイルに書くところまではやらず、stdout出力で。