sk0ya.Editor.Controls 1.0.4

dotnet add package sk0ya.Editor.Controls --version 1.0.4
                    
NuGet\Install-Package sk0ya.Editor.Controls -Version 1.0.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="sk0ya.Editor.Controls" Version="1.0.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="sk0ya.Editor.Controls" Version="1.0.4" />
                    
Directory.Packages.props
<PackageReference Include="sk0ya.Editor.Controls" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add sk0ya.Editor.Controls --version 1.0.4
                    
#r "nuget: sk0ya.Editor.Controls, 1.0.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package sk0ya.Editor.Controls@1.0.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=sk0ya.Editor.Controls&version=1.0.4
                    
Install as a Cake Addin
#tool nuget:?package=sk0ya.Editor.Controls&version=1.0.4
                    
Install as a Cake Tool

Editor

Editor は、WPF で作られた Vim ライクなテキストエディタです。 コアロジックと UI を分離した 3 層構成になっており、Vim 操作の多くを Editor.Core で処理します。

主な機能

  • Normal / Insert / Visual / Visual Block / Visual Line モード
  • ドットコマンド (.)、レジスタ、マーク、マクロ
  • :substitute:changes / :jumps / :undolist / :earlier / :later、コマンド履歴、.vimrc / _vimrc 読み込み
  • Vimscript 設定の基本機能(:let:echo:execute:if / :else / :endif:for / :endfor:function / :endfunction:call。関数は .vimrc / :source 内で定義でき、a:arg 形式の引数と再帰深さ制限に対応)
  • シンタックスハイライト(複数言語対応)
  • LSP 連携(補完、ホバー、診断、定義ジャンプ、参照検索、シグネチャヘルプ、フォーマット、リネーム、コードアクション、スマート選択範囲)
  • マルチバッファ、タブ、ウィンドウ分割(:split / :vsplit / Ctrl+W プレフィックス)
  • Quickfix(:copen / :cclose / :cn / :cp / :cc N / :cl)と Location list(:lopen / :lclose / :lnext / :lprev / :ll [N] / :llist
  • LSP ワークスペース診断(:diagnostics / :diagworkspace/diagnostic 対応サーバーで複数ファイルの診断を References パネルに表示)
  • プロジェクト横断検索・置換(:grep / :vimgrep / :grepreplace / :creplace、Quickfix 結果から確認付き一括置換)
  • コードフォールド(za / zc / zo / zR / zM / zf
  • テキストオブジェクト(iw / aw など、Visual character mode の 3iw / 2aw カウント付き選択に対応)
  • サラウンド操作(ys / cs / ds
  • コメントトグル(gc / gcc
  • Git 差分表示・ブレームアノテーション(:Git blame
  • スペルチェック(set spell]s / [s / z=
  • 大規模ファイル向けの可視範囲構文解析・描画キャッシュ
  • 統合ターミナル(:terminal / :term、複数起動、:terms / :termnext / :termprev / :termselect N / :termclose [N]
  • セッション管理(:mksession / :source
  • テキスト整形(gq{motion} / gqq

動作環境

  • Windows 10/11(WPF アプリ)
  • .NET SDK 9.0 以上

ビルド・実行

# ソリューション全体をビルド
dotnet build Editor.sln

# アプリ起動
dotnet run --project src/Editor.App/

# 指定ファイルを開いて起動(引数1つ目をファイルパスとして解釈)
dotnet run --project src/Editor.App/ -- "C:\path\to\file.cs"

# リリースビルド
dotnet build Editor.sln -c Release

テスト

# Core テストを実行
dotnet test tests/Editor.Core.Tests/

# 特定テストを実行
dotnet test tests/Editor.Core.Tests/ --filter "FullyQualifiedName~VimEngineTests.DD_DeletesLine"

アーキテクチャ

依存方向は次の通りです。

Editor.App -> Editor.Controls -> Editor.Core
Editor.App -> Editor.Controls.Defaults
Editor.Controls.Defaults -> Editor.Controls
Editor.Controls.Defaults -> Editor.Core
Editor.Core.Tests -> Editor.Core
  • src/Editor.Core WPF 非依存の Vim エンジン、バッファ、Ex コマンド、シンタックス、フォールドなどの純ロジック層
  • src/Editor.Controls VimEditorControl / EditorCanvas を含む、NuGet 化対象の WPF コントロール層
  • src/Editor.Controls.Defaults Git / LSP の既定実装をまとめた補助 DLL。Editor.Controls に注入して使う
  • src/Editor.App メインウィンドウ、タブ管理、ファイルツリーなどのホストアプリ層
  • tests/Editor.Core.Tests Editor.Core のユニットテスト

NuGet パッケージ

  • Editor.Core Vim エンジンやテキスト処理のコアロジック
  • Editor.Controls 再利用可能な VimEditorControl 本体
  • Editor.Controls.Defaults Editor.Controls 用の既定 Git/LSP 実装

このリポジトリの NuGet 配布先は nuget.org です。公開パッケージは認証なしで取得できます。

利用側のアプリでは、コントロール本体と既定実装を追加します。

dotnet add package sk0ya.Editor.Controls --version 1.0.1
dotnet add package sk0ya.Editor.Controls.Defaults --version 1.0.1

sk0ya.Editor.Core は上記パッケージの依存として自動的に取得されます。

Editor.App では VimEditorControlDefaults.CreateOptions() を使って既定の Git/LSP 実装を注入しています。

NuGet 公開

.github/workflows/publish-nuget.yml は次の条件で nuget.org にパッケージを公開します。

  • v* 形式の Git タグを push したとき
  • GitHub Actions の workflow_dispatch で手動実行したとき(version を指定)

公開には GitHub リポジトリのシークレット NUGET_API_KEY(nuget.org の API キー)が必要です。タグ v1.0.1 を push すると、1.0.1 を package version として sk0ya.Editor.Core / sk0ya.Editor.Controls / sk0ya.Editor.Controls.Defaults を nuget.org に push します。

LSP キーバインド

キー モード 動作
K Normal ホバー情報をステータスバーに表示
gd Normal 定義にジャンプ
gr Normal 全参照を検索(References パネル)
ga Normal コードアクション(j/k/Enter/Esc で選択)
F2 Normal シンボルのリネーム
Shift+Alt+Right Normal/Visual LSP selectionRange で選択範囲を親へ拡張
Shift+Alt+Left Visual LSP selectionRange で選択範囲を直前段階へ縮小
Ctrl+Space Insert 補完トリガー
/Ctrl+N/Ctrl+P Insert+補完 補完候補を移動
Tab/Enter Insert+補完 選択候補を挿入
:Format コマンド LSP でドキュメントをフォーマット
:Rename [name] コマンド LSP リネーム(名前省略時はダイアログ)
:diagnostics / :diag コマンド LSP workspace/diagnostic でワークスペース診断を取得し、References パネルに表示
:lopen / :llist コマンド 現在バッファの診断、または検索結果を Location list として表示
:lnext / :lprev / :ll [N] コマンド 現在バッファの Location list 内を移動

LSP 対応サーバー

LSP サーバー本体は同梱していません。必要なサーバーを個別にインストールしてください。

拡張子 サーバー
.cs csharp-ls
.py pylsp
.ts / .js typescript-language-server
.rs rust-analyzer
.go gopls
.c / .cpp clangd
.lua lua-language-server
.md / .markdown marksman

ウィンドウ分割

コマンド 動作
:split / :sp 水平分割
:vsplit / :vs 垂直分割
Ctrl+W w 次のウィンドウへ
Ctrl+W q ウィンドウを閉じる
Ctrl+W h/j/k/l 方向を指定してウィンドウ移動
Ctrl+W v 垂直分割
Ctrl+W s 水平分割

サラウンド操作

コマンド 動作
ys{motion}{char} モーション範囲を囲む
cs{old}{new} 囲み文字を変更
ds{char} 囲み文字を削除

コメントトグル

コマンド 動作
gcc カレント行のコメントをトグル
gc{motion} モーション範囲のコメントをトグル
Visual + gc 選択範囲のコメントをトグル

テーマ

  • Dracula(デフォルト)
  • Nord
  • TokyoNight
  • OneDark

テーマは VimEditorControl.SetTheme(EditorTheme) で変更できます。

設定(.vimrc)

起動時にホームディレクトリまたはプロジェクトディレクトリの .vimrc / _vimrc / init.vim を読み込みます。

set tabstop=4
set expandtab
set scrolloff=8
set number
set relativenumber
set spell
set textwidth=80

let mapleader = " "
nnoremap <Leader>w :w<CR>
nnoremap <Leader>q :q<CR>

function ApplyProjectDefaults(name)
  let g:project_name = a:name
  if 1
    for item in [1, 2]
      let g:last_project_item = item
    endfor
  endif
endfunction
call ApplyProjectDefaults('editor')

modeline は安全側の既定として無効です。.vimrcset modeline を指定すると、ファイル読み込み時に先頭または末尾 5 行から vim: set option=value option ...: 形式だけを解釈し、既存の set オプションに反映します。任意の Ex コマンドは実行しません。

set modeline

参考

  • 今後の実装計画と実装済み機能: ROADMAP.md
Product Compatible and additional computed target framework versions.
.NET net9.0-windows7.0 is compatible.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on sk0ya.Editor.Controls:

Package Downloads
sk0ya.Editor.Controls.Defaults

Default Git and LSP integrations for the Editor WPF control.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.4 42 6/6/2026
1.0.3 43 6/6/2026
1.0.2 56 6/3/2026
1.0.1 101 5/31/2026
1.0.0 104 5/1/2026