HN 日本語サマリー

← 一覧へ戻る
プログラミング

Txt: エンジニア向けの高速キーボード駆動型ターミナルテキストエディタ

Txt: A fast, keyboard-driven terminal text editor for engineers (txt.hellman.io)

17 pointsby jlundberg11 コメント

要約

Txtは、エンジニアがターミナル内で素早くテキスト編集を行うために設計された、高速でキーボード駆動型のターミナルテキストエディタです。設定や学習コストを最小限に抑え、直感的な操作感と予測可能な挙動を重視しており、IDEの代わりではなく、ちょっとした編集作業に最適なツールとして位置づけられています。シンタックスハイライト、コード折りたたみ、LSPサポート、Git連携など、開発に必要な機能も備えています。

全文翻訳

txt

エンジニア向けの高速でキーボード駆動のターミナルテキストエディタ。

[動画: Txtのデモンストレーション]

なぜtxtなのか

ほとんどのターミナルエディタは、編集を開始する前に儀式を要求します。プラグインの設定、モーダルシステムの学習、あるいは数時間かけて正しく設定することとの格闘などです。GUIエディタは逆の問題を抱えています。強力ですが、設定ファイルを編集したり、タイポを修正したりするためにマウスに手を伸ばすと、フローが中断されます。

私がtxtを開発したのは、私が時間のほとんどをターミナルで過ごしており、ちょっとした編集のために別のツールに切り替えることが、常に望まない摩擦だと感じていたからです。ターミナル内に存在するエディタは、モーダルパラダイムを中心に構築された急峻な学習曲線を持っているか、あるいは真に有用であるにはあまりにも制限が多すぎます。

txtの設計原則はシンプルです。「編集は思考のように感じるべきだ」。エディタは即座に開き、キーストロークは予測可能で発見しやすく、カーソルはまさに期待した場所に配置されます。モーダルの混乱はなく、必須の設定もなく、最初のファイルを開く前にナビゲートする必要のあるプラグインエコシステムもありません。

txtはあなたのメインIDEを置き換えることを目指していません。それは、あなたが「何かを編集する」必要があるときに手に取るエディタであり、それをターミナル内で行いたい場合のためのものです。

機能

  • 構文ハイライト: tree-sitter を使用し、Rust、Python、JavaScript、TypeScript / TSX、Go、Java、Kotlin、C#、Groovy、Shell、HTML、CSS、JSON、YAML、TOML、Properties、Markdown(埋め込みコードブロックを含む)に対応
  • コード折りたたみ: tree-sitter ドリブンな折りたたみ機能。折りたたみガターと ▸ N lines マーカーを備えています。Ctrl+Shift+[ でトグル、Alt+0 / Alt+Shift+0 で全て折りたたむ/展開します。
  • 現在のファイル内のシンボル: Ctrl+Shift+O で、バッファ内の全ての関数、クラス、宣言を対象としたファジーピッカーを開きます。
  • 固定スコープヘッダー: スクロール中も、囲んでいる関数、クラス、またはモジュールがエディタペインの上部に固定され、ステータスバーに薄いパンくずリストが表示されます。
  • Git統合: 追加/変更/削除された行のインラインガター、ステータスバーの現在のブランチ、ステージング、コミット、プッシュ、プル用の組み込み操作ダイアログ(Ctrl+Shift+G)。
  • ファジーファイルピッカー: 大規模プロジェクト全体を高速にナビゲートするための機能。
  • マルチカーソル編集: Alt+Shift+Up/Down でカーソルを上下に追加します。
  • AST認識選択: 構文ツリーに沿って選択範囲を拡張・縮小します。
  • 言語サーバープロトコル (LSP): 補完、ホバー情報、定義元への移動、参照の検索。LSPバイナリが起動される前に、初回使用時に信頼を求めるプロンプトが表示されます(LSPサーバーの設定を参照)。
  • スニペット: TextMate スタイルのプレースホルダーとタブストップ。言語ごとに ~/.config/txt/snippets/<lang>.toml からロードされます。
  • キーボードマクロ: 編集シーケンスを名前付きスロット a-z に記録(Ctrl+Shift+R)し、単一の元に戻すステップ内で再生します(Ctrl+Alt+R)。
  • マークとジャンプリスト: Ctrl+M の後に a-z を押してワークスペース全体で名前付きマークを設定し、Ctrl+' で戻り、履歴を Alt+Left / Alt+Right で辿ります。全て <workspace>/.txt/ の下に永続化されます。
  • コードフォーマット: 入力中にリアルタイムでインデントルールが適用され、外部ツール(rustfmt、prettier など)によるワンキーストロークフォーマット。言語ごとに設定可能です。
  • .editorconfig サポート: ファイルごとのインデントスタイルと幅、改行コード、最終改行、末尾空白のトリミングを自動的に読み込みます。
  • インデントガイドとカラムルーラー: 設定可能なカラム(例: rulers = [80, 120])に表示されます。
  • 検索と置換: 正規表現と大文字/小文字を区別するモードに対応。
  • ファイルサイドバー: 完全なファイル管理機能(作成、名前変更、削除、移動)。.git およびドットフォルダはデフォルトで非表示。マウス操作(クリックで開く、スクロールで閲覧、セパレータのドラッグでリサイズ)にも完全対応。
  • マウスフレンドリーなエディタ: タブをクリックして切り替え、ダブルクリックで単語を選択、水平ホイールスクロール、カーソルを過ぎても垂直スクロール可能(次の編集で元に戻ります)。
  • 設定可能なキーバインディング: ~/.config/txt/keybindings.toml をドロップするか、設定 UI から VS Code または IntelliJ IDEA のプリセットを選択できます。
  • ファイル監視: 外部ツールによって変更されたファイルを自動的にリロードします。

インストール

Homebrew (macOS および Linux)
brew tap ErikHellman/tap
brew install txt

後で brew upgrade txt でアップデートします。

macOS および Linux (curl)
curl -fsSL https://raw.githubusercontent.com/ErikHellman/txt/main/install.sh | sh

最新リリースバイナリを ~/.local/bin にインストールします。そのディレクトリが PATH に含まれていることを確認してください。同じコマンドを再実行してアップデートします。

Windows
irm https://raw.githubusercontent.com/ErikHellman/txt/main/install.ps1 | iex

%LOCALAPPDATA% xt にインストールし、自動的に PATH に追加します。

ソースからビルド

Rust 1.88 以降が必要です。

git clone https://github.com/ErikHellman/txt.git
cd txt
cargo build --release

バイナリは ./target/release/txt にあります。PATH のどこかにコピーしてください。

使用方法

ファイルまたはディレクトリを開きます。

txt file.txt
txt .

ディレクトリを開くと、ファイルサイドバーが自動的に表示されます。キーバインディングの全リストを表示するには、いつでも F1 を押してください。

キーバインディング
キーアクション
Ctrl+Sファイルを保存
Ctrl+Q終了
Ctrl+Pファジーファイルピッカー
Ctrl+Shift+O現在のファイル内のシンボル
Ctrl+Shift+Pコマンドパレット
Ctrl+F検索
Ctrl+H検索と置換
Ctrl+WASTノードの囲みまで選択範囲を拡張
Ctrl+Shift+W選択範囲を縮小
Ctrl+Shift+[カーソル位置のコード折りたたみトグル
Alt+Shift+Up/Down上/下のカーソル追加
Alt+M対応する括弧にジャンプ
Alt+Lビューポートをカーソルにセンタリング
Alt+Left / Alt+Rightジャンプリストを辿る
Ctrl+Z元に戻す
Ctrl+Y / Ctrl+Shift+Zやり直し
Ctrl+Shift+GGit操作ダイアログ
Ctrl+LLSPサーバーの設定
Ctrl+Alt+,設定を開く
F1全キーバインディングを表示

上記のデフォルト txt キーマップが表示されます。設定 UI(Ctrl+Alt+,)から VS Code および IntelliJ IDEA のプリセットが利用可能で、~/.config/txt/keybindings.toml で個別のバインディングを上書きできます。

LSPサーバーの設定

LSPはワークスペースごとでオプトインです。最も簡単な開始方法は、LSPピッカー(Ctrl+L、またはコマンドパレットの「LSPサーバーの設定」)です。言語を選択すると、txt が選択内容を <workspace>/.txt/lsp.toml に書き込みます。まずアップストリームからサーバーバイナリをインストールしてください — txt は言語サーバーをダウンロードしません — そしてバイナリが初めて起動される際に、承認を求められます。承認されたバイナリの SHA-256 ハッシュは ~/.config/txt/trusted_binaries.json にキャッシュされます。変更されたバイナリは再プロンプトします。

組み込みサーバープリセット

ピッカーには以下のサーバーのプリセットが含まれています。インストール手順については、アップストリームプロジェクトを参照してください。

C/C++ (clangd)、Python (pyright)、Lua (lua-language-server)、Zig (zls) もピッカーに含まれています。

lsp.toml の直接編集

デフォルト以外の設定 — 追加フラグの渡し、カスタムバイナリの指定、または initializationOptions の提供 — の場合は、<workspace>/.txt/lsp.toml を編集します。

enabled = true
server  = "rust-analyzer"

# 追加引数なしのプレーンサーバー。
[servers.rust-analyzer]
command = "rust-analyzer"

# `args` 配列を介して追加引数を渡します。
[servers.gopls]
command = "gopls"
args    = ["serve", "-rpc.trace"]

# カスタムバイナリパスを使用し、LSPハンドシェイク中に初期化オプションのJSONペイロードを転送します。
[servers.pyright]
command      = "/opt/homebrew/bin/pyright-langserver"
args         = ["--stdio"]
init_options = { pythonPath = "/usr/bin/python3" }

# 複数のサーバーを並べて配置できます。ファイル先頭の `server` キーがアクティブなものを選択します。
[servers.typescript-language-server]
command = "typescript-language-server"
args    = ["--stdio"]

フィールドは以下の通りです。

  • enabled — マスター スイッチ。false(デフォルト)の場合、LSPサーバーは起動されず、txt は tree-sitter のみを使用します。
  • server — アクティブにする [servers.<name>] エントリ。この単一行を編集してサーバーを切り替えます。
  • [servers.<name>] — サーバーごとのテーブル。command は実行可能ファイル名または絶対パス、args は引数リスト、init_options はLSPハンドシェイク中に initializationOptions として送信されるオプションのJSON値です。

ライセンス

txt は MIT および Apache 2.0 のデュアルライセンスで提供されます。どちらかを選択できます。

バグレポートと機能リクエスト

バグを見つけたり、機能のアイデアがありますか?GitHub でイシューを開いてください。

github.com/ErikHellman/txt/issues

バグの場合は、オペレーティングシステム、txt のバージョン(txt --version を実行)、および問題を再現するために必要な手順を含めてください。