プログラミング
Show HN: sce(Simple Console Editor)
Show HN: sce (Simple Console Editor) (github.com)
要約
このプロジェクトは、Pythonで書かれたシンプルなコンソールベースのテキストエディタ「sce」を紹介するものです。2008年に開発が始まり、長年にわたり機能改善と安定性向上が図られてきました。依存関係はPythonランタイムとcursesライブラリのみで、単一ファイル実行可能ファイルとして配布可能です。Linux、macOS、BSDなど、POSIX互換システムで動作します。エディタ機能に加え、ブラウザライクなページャー機能も実装されています。ソースコードは数千行程度と比較的短く、コードの可読性は低いものの実用性は高いと説明されています。
全文翻訳
SCE -- シンプルコンソールエディタ
概要
これは私が2008年の暑い夏に数日間で最初に書いた、私の個人的なプレーンテキストエディタです。長年にわたり、マイナーな機能強化と安定性改善、そしてブラウザライクなページャーの初期実装を行ってきました。最初の頃から、CからGo、PythonからScheme、BashからErlang、HTML/CSS/JavaScript、LaTeXからCommonMark、JSONからXMLまで、Javaを除くすべての言語で、特にソースコードやスクリプト、設定の編集にこれを使用しています。コードはPythonで書かれており、Python 3.6+と2.7の両方で動作し、現在のバージョン(ブラウザライクなページャーを含む)で約3.5k行と、わずか数千行です。しかし、欠点としてはコードはかなり散らかっていますが、仕事はこなします。基本的なPythonランタイムとcursesライブラリ以外の依存関係はありません。シンプルな単一ファイルスタンドアロン実行可能ファイルとしてデプロイでき、LinuxからOpenBSD、OSXまで、あらゆるPOSIXライクなシステムで動作します。
インストール
プリビルド実行可能ファイルのダウンロード
最も簡単なインストール方法は、GitHubのリリースページから入手できる自己完結型のPython zippappをダウンロードすることです。これらのファイルは実際にはプレーンな.zipアーカイブであり、Pythonソースのバイトコードコンパイルおよび最適化されたバリアント(*.pyoファイル)を含み、#!/usr/bin/env -S python3 -u -O -O -B -E -S -s -R -b のようなシェバンが付いています。したがって、このファイルを実行可能にすると、他のスクリプト/バイナリと同様に実行できます。*.pyoファイルはPythonのメジャーバージョン間で互換性がないため、ダウンロードしたバージョンとpython3.xバージョンを一致させることが非常に重要です。それらを一致させないと、次のような非常に紛らわしいPythonエラーに遭遇します:/usr/bin/python3: can't find '__main__' module in '/tmp/sce'。
あるいは、コンパイルされていないソース(*.py)を含むポータブルバリアントを使用することもできます。これは問題なく動作しますが、Pythonインタープリタがバイトコードコンパイルを行うまで、起動に少し時間がかかる場合があります。
例えば、Python 3.14をインストールした場合(したがってpython3.14は$PATHのどこでも利用可能)、Linux、OSX、FreeBSD、OpenBSD、Android(Termux経由)、そしておそらく他のほとんどのPOSIX準拠システムで動作します。以下のコマンドを実行できます。
curl \
-s -S -f -L \
-o /tmp/sce \
https://github.com/volution/simple-console-editor/releases/download/preview/editor--python-3.14--v0.2.0--preview \
chmod a=rx /tmp/sce
## 注意:終了するには、Ctrl+X(何も変更していない場合)を押すか、Ctrl+Rを押して`exit`と入力し、変更を破棄します。
## 保存するには、Ctrl+Sを押します。
/tmp/sce
## 注意:**既存**のファイルを編集するには。
/tmp/sce my-file.txt
## 注意:新しいファイルを編集するには(つまり、ファイルが存在する必要があります)。
touch my-file.txt
/tmp/sce my-file.txt
その後、$PATHで利用可能な場所に配置したい場合は、次のようにします。
sudo cp /tmp/sce /usr/local/bin/sce
前のセクションで述べたように、Python 3.6+(または2.7)以外に依存関係はありません。
ソースから実行
あるいは、GitHubからリポジトリをチェックアウト(またはソースをダウンロード)し、他のPython CLIと同様に実行することもできます。
python ./sources/exec_editor.py
デプロイしたい場合は、ソースフォルダの内容だけが必要で、それ以外は何も必要ありません。
例
エディタの例
起動構文
エディタの例
ページャーの例
起動構文
sce
sce <file>
produce | sce | consume
最初のバリアントでは、エディタは空のバッファで開き、ユーザーが編集できるようにします。その後、`save /tmp/file.txt`のようなコマンドを使用して内容を保存し、`exit`コマンドを実行できます。コマンドを実行するには、Ctrl+Rを押して目的のコマンドを入力します。(`exit`コマンドの代替として、Ctrl+Xを押すだけでもかまいません。)
2番目のバリアントでは、エディタは指定されたファイルを開き、ユーザーが編集できるようにします。その後、`save`のようなコマンドを使用して内容を保存し、`exit`コマンドを実行できます。(`save`コマンドの代替として、Ctrl+Sを押すだけでもかまいません。)
3番目のバリアントでは、エディタは`produce`のすべての出力を読み込み、匿名バッファで開き、ユーザーが編集できるようにします。その後、`exit`コマンドでエディタを閉じ、`consume`によって消費されるすべての出力を書き込むことができます。このバリアントは基本的にパイプ(またはプレーンファイル)を標準入出力として使用し、一時ファイルの使用を必要としません。
以下はサポートされているすべてのコマンドです(Ctrl+Rを押すだけで入力できます):
exit -- 保存を求めたり実行したりせずに終了します。
save または save /tmp/file.txt;
open /tmp/file.txt;
clear -- 現在のバッファを空にします。
gs text -- textを検索します。(次のマッチを見つけるには、Ctrl+Gを押すだけです。)
gr regex -- 正規表現を検索します。(再度Ctrl+Gを使用して次のマッチを見つけます。)
gl number -- 行番号に移動します。
replace this that -- 最初のマッチを検索し、それを置換するにはCtrl+Nを押す必要があります。次のマッチを見つけるには、Ctrl+Nを押し、さらにCtrl+Nを押して置換します。
store -- 現在の選択範囲を一時ファイルに保存します。
load -- 一時ファイルから保存された選択範囲を現在のカーソル位置に挿入します。(storeとloadは呼び出し間で機能するため、ファイル間でコピー&ペーストできます。)
pipe command arguments... -- 現在のファイルまたは選択範囲に対してコマンドを実行し、標準入力にフィードし、標準出力からの結果で置き換えます。
sys i command arguments... -- コマンドを実行し、標準出力からの出力を挿入します。
sys o command arguments... -- コマンドを実行し、現在の選択範囲を標準入力にフィードします。
copy -- Ctrl+Dを参照してください。
cut -- Ctrl+Kを参照してください。
yank -- Ctrl+Yを参照してください。
paste -- Ctrl+Tを参照してください。
以下はサポートされているすべてのキーバインディング/ショートカットです:
up, down, left, right, home, end, page-up, page-down, backspace, delete -- 期待通りに動作します。
Ctrl+X -- ファイルが変更されていないか、既に保存されている場合、エディタを終了します。
Ctrl+S -- ファイルを保存します。
Ctrl+R -- コマンドを入力できるようにします。
Ctrl+G -- 次のマッチに移動します。(gsまたはgrによって開始される)
Ctrl+N -- 現在のマッチを置換するか、次の置換マッチに移動します。(replaceによって開始される)
Ctrl+Space -- 選択を開始します。再度Ctrl+Spaceを押すと選択が終了します。選択は移動間で永続的です。選択をクリアするにはCtrl+Spaceを2回押します。
Ctrl+D -- 選択範囲を内部バッファにコピーします。
Ctrl+K -- 選択範囲を内部バッファにカットします。
Ctrl+Y -- 内部バッファから貼り付けます。
Ctrl+V -- 現在の行にジャンプマーカーを設定します。
Ctrl+Z -- 前のマーカーに移動し、現在の行を新しいジャンプマーカーとして設定します。(つまり、Ctrl+VとCtrl+Zを使用すると、ファイル内の2つの部分間を簡単にジャンプできます。)
Ctrl+T -- sce-pasteを実行します。これはユーザー提供の実行可能ファイルで、おそらく別のcursesベースのアプリケーションであり、標準出力の出力を挿入します。(例えば、fzfを使用してさまざまなスニペットやその他の「オートコンプリート」機能を提供できます。)
ページャーの例
起動構文
produce | sce-pager <pattern> | consume
produce | sce-pager <pattern> <prefix> <anchor> <suffix> <data> | consume
4つの引数は次のとおりです:
<pattern> -- キャプチャを含む正規表現(次の例では`^(pub...`)、ハイライトされるべき行の部分に一致するはずです。
<prefix> -- 置換テンプレート(次の例では`
<anchor> -- 置換テンプレート(次の例では`[
<suffix> -- 置換テンプレート(次の例ではスペース)、アンカーの直後の通常のテキストの一部になります。
<data> -- 置換テンプレート(次の例では`
入力と出力:
ページャーは、標準入力と標準出力がファイルまたはパイプ(実際にはTTY以外のもの)であることを期待します。
ページャーは、標準エラーが端末(つまりTTY)であることを期待します。
いいえ