2017年12月16日土曜日

Emacs で Python してる時の 検索移動、選択編集について(201908up)

python を少しづつ使ってて、検索を使う回数が増えてきた。 emacs(elpy)を使っていて、 occur で検索、必要に応じて編集というのが便利、たまに imenu-list で定義に飛ぶという程度。で、たまに、ディレクトリ内で grep(ag)を使うこともあるが、 キャッシュディレクトリ(.mypy_cache)が検索にふくまれてしまい、ああああ、とかで、遊ばれている状況だ。 で、検索とかにだけ着目して整理してみた。
「探して、飛んで/抽出して、編集して、戻る」が基本だと考え、スパゲッティになっているinitsの中身を眺めてみたのだが、結構時間を食った。 で、 おおよそ5つの方法だった。自分で把握してないのが怖い。 キーバインドのバッティングも見つけた。コピペで設定とはそうゆうことなんだろう。
  1. スクリーン表示中の 文字(1 or 2 文字のみ)へ移動
    • avy (GitHub - abo-abo/avy)
    • avy-migemo(エラーを吐くようになった201902。私の設定が原因? avyの関数名とかの更新に対応してないのが原因かも?)
      • ace-jump-modeに変更した(201902)
      • avy-migemo-e.g.ivy, avy-migemo-e.g.swiperは動くので、key-bindを切ってivyの方だけでmigemoを使用(201902)。
      • ついに動かなくなった(201905)。
      • 暫定復活(201908)。 ここに情報があった。
        すごい。ありがたい(リンクミスを修正)。
    • 狭い画面なんで、あまり使わないが、スクリーン内の移動は早い。
    • 指が覚えてほしい。2文字の方を優先している。 (201902)
  2. 今、編集中のファイルから絞り込み検索、移動
    • counsel    isearchの代わり GitHub - abo-abo/swiper: Ivy
    • ivy-occur    mini-bufferからoccurへ
    • occur         emacs の標準、選択編集したい時だけ
    • color-moccur       migemoが使える
    • (imenu)       emacs の標準
    • (imenu-list)     平滑imenuのサイドバー表示  GitHub - bmag/imenu-list
  3. 読み込んでる全ファイルから絞り込み検索、移動、選択編集
  4. ディレクトリ指定(配下)で検索、jump、選択編集
    • ag から wgrep + wgrep-ag
      • 除外指定(ag)は  ~/.agignore に。
    • counsel-ag   か counsel-rg
      • たまに使う。counselとの連携。
    • multi-occur (>23 buildin)(201904) 使ってない
      • multi-occur :: To select buffers to search individually
      • multi-occur-in-matching-buffers :: To select buffers to search by regexp
  5. 予め定めた範囲内での検索、移動
  6.  カレント配下を検索、移動(201811)、編集(201903)
最近、gtagsも動くようにしたのだが、 moccurより検索、移動は快適で、定義場所に飛んでくれるのはありがたい。一方、moccurは編集が付く。初心者の私にはgtagsは無用の長物みたい使い分けがまだうまくなじまない。2−4を使い分ければ十分みたい。
意外とdeadgrepがよさげだったりする。(201902)

最近(201808)は、moccur, counsel-gtags と counsel-ag がほとんどになったと思う。imenu は使わなくなってる。

(201902) 意外とdeadgrepがシンプルでよかったりする。 deadgrepのサイトに、他との比較例が ある。 gitを使ってなくても、git initしておくと良い。自動でpathを設定してくれるパッケージが多いように思う。

(201903) deadgrep に deadgrep-edit-modeが追加された。 moccur の方がきちんと編集できるみいたいだが、簡単な修正なら、これでもよさそう。

(use-package deadgrep :ensure t
:bind (
  ("M-s d" . deadgrep)
  :map deadgrep-mode-map
  ("r" . deadgrep-edit-mode)  ;; interactive
  :map deadgrep-edit-mode-map
  ("C-c C-c" . deadgrep-mode)
  ))

1 件のコメント:

  1. avy-migemo.el のエラーは avy--generic-jump 関数を検索して最後の方の avy-style の文字を消せばとりあえず動きます。(4か所)
    原因は avy の関数の更新に avy-migemo がついて行けてないことですね。avy--generic-jump と avy--process 関数は obsolete となっていました。なぜか互換性無くですが。新関数への橋渡しですかね。

    実は新関数への置き換えもほぼ単純置き換えで動いたのですが、労力の割にあまり意味ないです。

    返信削除

麻のボディタオル

2018年の秋(まだ、自転車を封印してない)、 近江上布伝統産業会館 で、興味からボディタオルを購入した。 お、よかった。: 自然派パン工房 ふるさとの道 ほぼ毎日風呂で使ってきて、ついに寿命がきたようだ。 お店の方に、「糸が痩せて破れてくる」まで使える、と...