YiエディターからHoogleを検索するためのバインディングを追加するにはどうすればよいですか?

sjy

Yiテキストエディタを学習しようとしています。Vimバインディングで提供されているデフォルトの構成を使用していますが、独自の構成で実験を開始したいと思います。

Gwernの構成はEmacsキーマップに基づいており、Hoogleを検索するためのバインディングが追加されていることがわかりますVimバインディングと同様のものを作成したいのですが、構成APIに関するドキュメントはそれほど多くなく、構成例のほとんどは初心者には理解しにくいものです。たとえば、cleverModefromYi.Mode.HaskellmkKeymapfromで作成されたバインディングの違いは何Yi.Keymap.Emacsですか?

Yi構成でハッキングを開始する最も簡単な方法は何ですか?初心者が始めるのに最適なAPIドキュメントはどれですか?

user3970496

この情報はドキュメントページに掲載され、まもなく公開されます。ドキュメントは、最終的に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]

編集
0

コメントを追加

0

関連記事

分類Dev

Spacemacsの指定されたレイヤーにカスタムキーバインディングを追加するにはどうすればよいですか?

分類Dev

この既存のアコーディオン検索コードに検索ボタンを追加するにはどうすればよいですか?

分類Dev

画像のパディングを小さくするためにメディアクエリを追加するにはどうすればよいですか?

分類Dev

Atomエディターでスクリプトを実行したりコマンドを実行したりするためのカスタムキーバインディングを設定するにはどうすればよいですか?

分類Dev

ProgressBarでデータバインディングを使用するにはどうすればよいですか?

分類Dev

データバインディングでngClassを使用するにはどうすればよいですか?

分類Dev

匿名バインディングを使用しているときにLDAPでユーザーを検索するにはどうすればよいですか?

分類Dev

インテント解決のためにデバッグログをフィルタリング(LogCat)するにはどうすればよいですか?

分類Dev

Netbeansの特定のエディタのイベントを閉じるためのフックを追加するにはどうすればよいですか?

分類Dev

テーブルデータを検索するための検索入力フィールドを作成するにはどうすればよいですか?

分類Dev

BaseAdapter for Spinnerから継承されたCustomAdapterをAndroidデータバインディングするにはどうすればよいですか?

分類Dev

データバインディングを使用してtextViewに複数の文字列値を追加するにはどうすればよいですか?

分類Dev

エンティティを更新するためにデータストアからIDを取得するにはどうすればよいですか?

分類Dev

HTMLからangularjsの$ rootScopeに双方向バインディングでデータを送信するにはどうすればよいですか?

分類Dev

カスタムMaskedTextBoxの検索クエリをコーディングするにはどうすればよいですか

分類Dev

データの検索/フィルタリング中に空のフィールドを処理するにはどうすればよいですか?

分類Dev

1つのプラグインでWordPress投稿エディターに複数のボタンを追加するにはどうすればよいですか?

分類Dev

Polymerがすべてのデータバインディングを完了したことを確認するにはどうすればよいですか?

分類Dev

AndroidStudioのエディターでフォントを追加するにはどうすればよいですか

分類Dev

バインディング変数がnullです。クエリされたLivedataがデータベースから削除されるまで、UIのオブザーバーを待機させるにはどうすればよいですか。

分類Dev

ビッグデータファイルからインデックス値の値を検索するにはどうすればよいですか?

分類Dev

プログラムで作成されたエンティティをデータサービスに追加するにはどうすればよいですか?

分類Dev

Sublime Text 3でフォーカスを検索バーからエディターに変更するにはどうすればよいですか?

分類Dev

プラグインをgrailsのデフォルトのgspエンコーディングから除外するにはどうすればよいですか?

分類Dev

バインディングを使用してAzureFunctionsからAzureTable Storageにレコードを追加するにはどうすればよいですか?

分類Dev

Java:inputStreamからエンコーディングを取得するにはどうすればよいですか?

分類Dev

ボタン間にのみパディングを追加するにはどうすればよいですか?

分類Dev

検索およびフィルタリングされた値のクエリテーブルを表示するにはどうすればよいですか?

分類Dev

保存されたインスタンスの状態を使用するためにデータバインディングを取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    Spacemacsの指定されたレイヤーにカスタムキーバインディングを追加するにはどうすればよいですか?

  2. 2

    この既存のアコーディオン検索コードに検索ボタンを追加するにはどうすればよいですか?

  3. 3

    画像のパディングを小さくするためにメディアクエリを追加するにはどうすればよいですか?

  4. 4

    Atomエディターでスクリプトを実行したりコマンドを実行したりするためのカスタムキーバインディングを設定するにはどうすればよいですか?

  5. 5

    ProgressBarでデータバインディングを使用するにはどうすればよいですか?

  6. 6

    データバインディングでngClassを使用するにはどうすればよいですか?

  7. 7

    匿名バインディングを使用しているときにLDAPでユーザーを検索するにはどうすればよいですか?

  8. 8

    インテント解決のためにデバッグログをフィルタリング(LogCat)するにはどうすればよいですか?

  9. 9

    Netbeansの特定のエディタのイベントを閉じるためのフックを追加するにはどうすればよいですか?

  10. 10

    テーブルデータを検索するための検索入力フィールドを作成するにはどうすればよいですか?

  11. 11

    BaseAdapter for Spinnerから継承されたCustomAdapterをAndroidデータバインディングするにはどうすればよいですか?

  12. 12

    データバインディングを使用してtextViewに複数の文字列値を追加するにはどうすればよいですか?

  13. 13

    エンティティを更新するためにデータストアからIDを取得するにはどうすればよいですか?

  14. 14

    HTMLからangularjsの$ rootScopeに双方向バインディングでデータを送信するにはどうすればよいですか?

  15. 15

    カスタムMaskedTextBoxの検索クエリをコーディングするにはどうすればよいですか

  16. 16

    データの検索/フィルタリング中に空のフィールドを処理するにはどうすればよいですか?

  17. 17

    1つのプラグインでWordPress投稿エディターに複数のボタンを追加するにはどうすればよいですか?

  18. 18

    Polymerがすべてのデータバインディングを完了したことを確認するにはどうすればよいですか?

  19. 19

    AndroidStudioのエディターでフォントを追加するにはどうすればよいですか

  20. 20

    バインディング変数がnullです。クエリされたLivedataがデータベースから削除されるまで、UIのオブザーバーを待機させるにはどうすればよいですか。

  21. 21

    ビッグデータファイルからインデックス値の値を検索するにはどうすればよいですか?

  22. 22

    プログラムで作成されたエンティティをデータサービスに追加するにはどうすればよいですか?

  23. 23

    Sublime Text 3でフォーカスを検索バーからエディターに変更するにはどうすればよいですか?

  24. 24

    プラグインをgrailsのデフォルトのgspエンコーディングから除外するにはどうすればよいですか?

  25. 25

    バインディングを使用してAzureFunctionsからAzureTable Storageにレコードを追加するにはどうすればよいですか?

  26. 26

    Java:inputStreamからエンコーディングを取得するにはどうすればよいですか?

  27. 27

    ボタン間にのみパディングを追加するにはどうすればよいですか?

  28. 28

    検索およびフィルタリングされた値のクエリテーブルを表示するにはどうすればよいですか?

  29. 29

    保存されたインスタンスの状態を使用するためにデータバインディングを取得するにはどうすればよいですか?

ホットタグ

アーカイブ