dired-jumpのCx Cjバインディングが機能しなくなった


7

以前は、次のアクションのキーボードショートカットがありました。

「このファイルを含むフォルダをDired +で開き、ファイル上にポイント(カーソル)を置きます」

だったC-x C-jと思います。手動で設定したことを覚えていません。なくなったようです。Dired +への最近の変更はおそらくこれを変更しましたか?

どちらにしても、これに使用できるDiredまたはDired +組み込みのインタラクティブ機能はありますか?そうでない場合、どうすれば作成できますか?

走れM-x dired-jumpます。問題は、キーバインドがなくなっていることです。私がそうするときC-h k C-x C-j RET、私は見C-x C-j RET (translated from C-x C-j <return>) is undefinedます。


2
ジャバーを使用していますか?
Malabarba 2014年

@Malabarba私は実際にJabberをインストールしています(ただし、Emacsに直接ロードしていません)。それでも問題はありますか?私がチェックします。
Amelio Vazquez-Reina

1
jabberはCx Cjを接頭辞としてバインドします。気付かないうちにロードされるかもしれません。アンインストールしてみてください(別のディレクトリに移動するだけで、後で元に戻すことができます)。
Malabarba 2014年

1
FWIW:ライブラリdired + .elは変更されずdired-jump、それにキーバインディングもありません。Dired +でdired-jumpさえ言及されていません。
2014年

2
このような場合(「Xが機能しなくなった」):(1)から再現してみemacs -Qます。(2)emacs -Qそれから再現できない場合は、initファイルを再帰的に二分して、問題の原因となっている部分を確認します。これを行うには、1 / 2、3 / 4、7 / 8の順にコメントアウトします。これを行うために使用できますcomment-regionC-uコメント解除)。それをすべて試した後、さらに助けが必要な場合(そしておそらく必要ない場合)は、ここで質問してください。
2014年

回答:


8

問題

jabber.elそしてdired-x、残念ながらこのキーバインドに矛盾。JabberはC-x C-jそのすべてのキーのプレフィックスとして使用しますが、diredはそれをあなたの最愛の人に設定しますdired-jump(それがおそらく後者がdired-bind-jump変数によってオプションになっている理由です)。

Jabberがインストールされてpackage.el いる場合、このキーを2回バインドすることで、事態をさらに複雑にします。最初にEmacsの起動時、次にロード時に jabber.el

ソリューション

dired-jumpJabberがロードされる前と後の両方でバインドします。これが(package-initialize)initファイル内で発生することを確認してください(使用する場合)。

(global-set-key (kbd "C-x C-j") #'dired-jump)
(eval-after-load 'jabber-keymap
  '(global-set-key (kbd "C-x C-j") #'dired-jump))

または、Emacs 24.4を使用している場合は、次の方法をお勧めします。

(global-set-key (kbd "C-x C-j") #'dired-jump)
(with-eval-after-load 'jabber-keymap
  (global-set-key (kbd "C-x C-j") #'dired-jump))

jabberキーマップを引き続き使用するには、次のように、別のキーシーケンスにバインドできます。

(global-set-key (kbd "C-c C-j") jabber-global-keymap)

#以前は何を'dired-jump意味しますか?フックに関数を追加するときにも使用されているのを見てきました。
Kaushal Modi 2014

5
@kaushalmodiそれはfunction引用です。これは通常の引用とほとんど同じですが、このシンボルが関数であることをバイトコンパイラに通知します(便利な警告を表示するために使用できます)。それはあなたのinitファイルには関係ありませんが、パッケージには関係があるので、私は良い実践を動機づけようとします。
Malabarba 2014年

4

他の人がすでに述べたように、あなたはdired-jumpDired-x(Dired +ではなく)によって提供されC-x C-j、Dired-xライブラリがロードされるときにバインドされる関数を考えています。(このバインドは、Dired-xがロードさdired-bind-jumpれるnil前にに設定することでオフにできます。)

それC-x C-jが何かをすることを考えると、それC-x C-jが未定義であると文句を言うのではなく、他の何かがそれに対するバインディングを定義したことが起こっています。最後にバインディングを定義した人が勝ちます。

したがって、ロードしている他のどのパッケージがオーバーライドしているかを追跡する必要がありますC-x C-j。そのパッケージはDired-xの後にロードされるためdired-x、initファイルでロードしている場合、それはさらにロードしているものか、ある時点で自動ロードされるものです。

以来C-x C-j、独自に何もしていませんが、別のキーを待ちが押されるのは、プレフィックスキーです。を押すC-x C-j C-hと、この接頭辞で始まるバインディングのリストが表示されます。これにより、犯人パッケージの良いアイデアが得られます。 ジャバーモードであるというマラバルバの仮説はもっともらしいものです。プレフィックスC-x C-jで始まるキーシーケンスを特定したら、を押しC-h kてから、そのキーシーケンスを押します。これにより、そのコマンドのヘルプテキストと、そのコマンドを提供するパッケージが表示されます。コマンドを提供するパッケージは、バインディングを定義するパッケージと同じである可能性があります。

それほど遠くまで進む必要があるとは考えられませんが、念のため、追跡できないキーバインディングがある場合は、キーがバインドされているキーマップを確認するにどうすればよいですか?を参照してください

をオーバーライドするパッケージをロードしC-x C-jたいが、そのバインディングを引き継ぎたくない場合は、そのバインディングをスキップするオプションがあるかどうかを確認してください。そうでない場合は、バインディングをひっくり返すことができます(global-set-key "\C-x\C-j" 'dired-jump)。問題のあるパッケージがロードされた後に実行するように手配します。それをあなたのinitファイルの最後に置くだけで十分かもしれません。そうでない場合は、使用できます

(eval-after-load " NAME-OF-THE-OFFENDING-PACKAGE " '(global-set-key "\ Cx \ Cj"' dired-jump))

2

あなたがするときあなたは何を見ますかC-hkC-xC-jRET

にバインドされていることがわかりdired-jumpます。それは、あなたはどちらか行っていないではない場合requiredired-xか、何か他のものと結合することをあなた/いくつかの他のパッケージオーバーライド。

あなたが行うことができM-x dired-jump、そのバインディングが必要な場合、あなたは行うことができます

(global-set-key (kbd "C-x C-j") 'dired-jump)

しかし、もしdired-bind-jumpあるtあなたが持っている場合は(require 'dired-x)、そのパッケージには、あなたのための結合が設定されます。


ありがとう- C-x C-j RET (translated from C-x C-j <return>)未定義です。
Amelio Vazquez-Reina

できますかM-x dired-jump?そうでない場合は、dired-xパッケージがロードされていません。
Kaushal Modi

ありがとう@kaushalmodi-はい、できますM-x dired-jump。OPでそのことを言及するのを忘れていました
Amelio Vazquez-Reina

コマンドがあり、問題がバインディングがめちゃくちゃになっていることを考えると、おそらく「キーボードバインディングが不足していることをデバッグするにはどうすればよいですか」という別の質問でこれを尋ねた方がよいでしょう。または類似?
Amelio Vazquez-Reina

1
そのバインディングは、起動emacs -Qして実行するだけで期待どおりに機能するはずです(require 'dired-x)。それが機能する場合はinit.el、バインディングが再びなくなるまで、徐々に値を入力します。そうすれば犯人を見つけることができます。もう1つの方法はC\-x\s+C\-j、.emacs.dフォルダーで再帰的なgrep / ag / ackを実行することです。
Kaushal Modi

1

私はこれを定期的に使用しています。でテストしたところemacs -Q、これで十分です。

(require 'dired-x)

dired-xとは異なり、によって機能が提供されdired+ます。前者はコアEmacsに同梱されており、後者はサードパーティの拡張ライブラリです。


また、それdired-bind-jumpがデフォルト値に設定されていることを確認してくださいt
レゴシア2014年

おかげで、私はちょうどチェックし@legoscia dired-bind-jumpですt。私もロードしてい(require 'dired-x)ます。奇妙な
Amelio Vazquez-Reina
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.