3

その意図はgit grep、 のコマンドとして使用するM-x grepことであり、それに伴うすべてのバッファの利点です。必要な機能:

  • ポイントの単語/物をデフォルト値として読み取ります(完了、並べ替え)
  • リージョンが設定されている場合、デフォルトの引数として現在のリージョンを読み取ります。

以下は私がこれまで持っているコードです:

(defun bw-read-string-at-point ()
  (interactive)
  (let ((word (word-at-point)))
    (set-text-properties 0 (length word) nil word)
    word))

(defun bw-git-grep (search-str)
  "Uses `git-grep` to find `search-str`"
  (interactive
   (list
    (read-string (format "Search for (%s): " (bw-read-string-at-point)))))
  (let ((search-str (if (= (length search-str) 0)
                        (bw-read-string-at-point) search-str)))
    (grep (concat "git --no-pager grep -i -I -nH --no-color --extended-regexp " search-str))))

interactiveそこのビットはかなり不器用で、もっと良くすることができると思います。

4

2 に答える 2

4

実際、それはかなりよさそうだ。default' argument of読み取り文字列を使用する必要があることを除いて、 interactiveinbw-read-string-at-pointはそこにあるべきではありません。または、さらに良いことに、を使用してgrep-tag-defaultください。これが私がそれを微調整する方法です:

(defun bw-git-grep (search-str)
  "Uses `git-grep` to find `search-str`"
  (interactive
   (let ((default (grep-tag-default)))
    (list
     (read-string (format "Search for (default %s): " default)
                  nil nil default))))
  (grep (concat "git --no-pager grep -i -I -nH --no-color --extended-regexp " search-str)))
于 2012-12-18T15:04:40.853 に答える
1

私はread-from-minibuffer代わりに使用しますread-string

(defun bw-git-grep (pattern)
  (interactive
   (list
    (read-from-minibuffer
     "Search for: "
     (if (region-active-p)
         (buffer-substring-no-properties (region-beginning) (region-end))
       (thing-at-point 'word)))))

  (let* ((grep-command "git --no-pager grep -i -I -nH --no-color --extended-regexp ")
         (command      (concat grep-command pattern))
         (grep-use-null-device nil))
    (grep command)))

また、コマンドへの追加を避けるために、おそらくgrep-use-null-devicenilであることを確認する必要があります(あまり好きではないようです)grep/dev/nullgit

于 2012-12-18T07:27:01.590 に答える