sk0ya.Editor.Core 1.0.5

dotnet add package sk0ya.Editor.Core --version 1.0.5
                    
NuGet\Install-Package sk0ya.Editor.Core -Version 1.0.5
                    
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.Core" Version="1.0.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="sk0ya.Editor.Core" Version="1.0.5" />
                    
Directory.Packages.props
<PackageReference Include="sk0ya.Editor.Core" />
                    
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.Core --version 1.0.5
                    
#r "nuget: sk0ya.Editor.Core, 1.0.5"
                    
#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.Core@1.0.5
                    
#: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.Core&version=1.0.5
                    
Install as a Cake Addin
#tool nuget:?package=sk0ya.Editor.Core&version=1.0.5
                    
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 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net9.0

    • No dependencies.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on sk0ya.Editor.Core:

Package Downloads
sk0ya.Editor.Controls.Defaults

Default Git and LSP integrations for the Editor WPF control.

sk0ya.Editor.Controls

Reusable WPF Vim-like editor control.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.5 0 6/8/2026
1.0.4 48 6/6/2026
1.0.3 44 6/6/2026
1.0.2 90 6/3/2026
1.0.1 97 5/31/2026
1.0.0 111 5/1/2026