Txt: エンジニア向けの高速キーボード駆動型ターミナルテキストエディタ
Txt: A fast, keyboard-driven terminal text editor for engineers (txt.hellman.io)
要約
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+W | ASTノードの囲みまで選択範囲を拡張 |
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+G | Git操作ダイアログ |
Ctrl+L | LSPサーバーの設定 |
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 にキャッシュされます。変更されたバイナリは再プロンプトします。
組み込みサーバープリセット
ピッカーには以下のサーバーのプリセットが含まれています。インストール手順については、アップストリームプロジェクトを参照してください。
- Rust — rust-analyzer
- Go — gopls
- TypeScript / JavaScript — typescript-language-server
- Kotlin — kotlin-lsp
- Java — Eclipse JDT Language Server (jdtls)
- C# — OmniSharp
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 を実行)、および問題を再現するために必要な手順を含めてください。