Yiテキストエディタを学習しようとしています。Vimバインディングで提供されているデフォルトの構成を使用していますが、独自の構成で実験を開始したいと思います。
Gwernの構成はEmacsキーマップに基づいており、Hoogleを検索するためのバインディングが追加されていることがわかります。Vimバインディングと同様のものを作成したいのですが、構成APIに関するドキュメントはそれほど多くなく、構成例のほとんどは初心者には理解しにくいものです。たとえば、cleverMode
fromYi.Mode.Haskell
とmkKeymap
fromで作成されたバインディングの違いは何Yi.Keymap.Emacs
ですか?
Yi構成でハッキングを開始する最も簡単な方法は何ですか?初心者が始めるのに最適なAPIドキュメントはどれですか?
この情報はドキュメントページに掲載され、まもなく公開されます。ドキュメントは、最終的にhttp://yi-editor.github.io/で利用できるようになります。それが稼働し始めたら、それは初心者にとって最良のドキュメントになるはずです。しばらく時間がかかる場合がありますので、こちらでお答えします。
これは、最初から適切な構成である必要があります。
import Yi
import Yi.Keymap.Vim
import qualified Yi.Keymap.Vim2 as V2
import qualified Yi.Keymap.Vim2.Common as V2
import qualified Yi.Keymap.Vim2.Utils as V2
import Yi.Hoogle (hoogleSearch)
main = yi $ myConfig
myConfig = defaultVimConfig { defaultKm = myKeymap }
myKeymap = v2KeymapSet $ myBindings
myBindings :: (String -> EditorM ()) -> [V2.VimBinding]
myBindings eval =
[ nmap "Y" (eval "yy")
, nmap' (leader "h") (hoogleSearch)
, imap "<End>" (withBuffer0 moveToEol)
]
-- Don't read the following, it's not important.
-- Boilerplate begins here
v2KeymapSet :: ((String -> EditorM ()) -> [V2.VimBinding]) -> KeymapSet
v2KeymapSet myBindings = V2.mkKeymapSet $ V2.defVimConfig `override` \super this ->
let eval = V2.pureEval this
in super {
V2.vimBindings = myBindings eval ++ V2.vimBindings super
}
nmap x y = V2.mkStringBindingE V2.Normal V2.Drop (x, y, id)
imap x y = V2.VimBindingE (\evs state -> case V2.vsMode state of
V2.Insert _ ->
fmap (const (y >> return V2.Continue))
(evs `V2.matchesString` x)
_ -> V2.NoMatch)
nmap' x y = V2.mkStringBindingY V2.Normal (x, y, id)
leader str = "\\" ++ str
-- Boilerplate ends here
ボイラープレートについて心配する必要はありません。私はそれがYiに組み込まれるべきだと本当に思います。ボイラープレートを無視すると、構成は非常に単純に見えます。
nmap、imap、nmap '、eval、およびleaderを理解することが重要です。
nmapとimapは、実際のvimで使用するものと似ています。nmapはvimの通常モードでキーをマップし、imapはvimの挿入モードでキーをマップします。
evalはキーストロークを評価できます。したがって、nmap "Y"の行により、通常モードのYは、 "yy"が通常モードで実行するのと同じことを実行します。これは、キーを再バインドするための優れた方法です。
リーダーは、単にリーダーキーを\として定義します。したがって、(リーダー "h")は単に\ hを押すことを意味します。
EditorM関数とYiM関数があるため、nmap 'が必要です。nmapはEditorMで動作し、nmap 'はYiMで動作します。これを理解するには、Yiがどのように機能するかについての知識が必要ですが、これについては説明しません。簡単にするために、hoogleSearch関数のタイプはYiMであるため、nmap 'が必要になります。
これで、Vimキーマップを使用してYiを拡張するための基本的なレイアウトが得られます。
この構成を使用すると、nmap 'を使用してバインドしたため、\ hはhoogleSearchをトリガーする必要があります。
キーマップをmkKeymapとcleverModeに追加することの違いは、キーマップをcleverModeに追加すると、haskellファイルでのみキーマップが有効になり、mkKeymapに追加すると、編集しているファイルに関係なくYiに追加されることです。Yiを始めたばかりのときは、おそらくこれについてあまり気にしないでしょう。
それがお役に立てば幸いです。ご不明な点がございましたら、githubの問題としてお気軽に言及するか、IRCの#yiにアクセスしてください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加