電気ペアモードで引用符をペアリングしないでください


7

引用符をペアにelectric-pair-modeない(シングルまたはダブル)にどうすればよいですか?それでも、引用符ではなく、他のすべてのもの(大括弧、中括弧など)をペアにしたい。


カスタマイズしてみましたelectric-pair-inhibit-predicateか?
elethan

@elethanこのelectric-pair-inhibit-predicate変数はどこにありますか?私のemacsにそれの未知の24.3.1
ggll

@ggll私はEmacs 25.1.1を使用していますが、私にとってはにありelec-pair.elます。
エレサン

ソースでelectric-pair-modeelectric-pair-pairsそしてelectric-pair-text-pairsカスタマイズのために使用されますが、electric-pair-text-syntax-table優先されます。これらの変数をローカルに設定するフックは、これを機能させるのに十分なはずです。その場合は後で確認し、回答を投稿します。
DoMiNeLa10 2017

回答:


5

以下をemacs initファイルに追加します。

(setq electric-pair-inhibit-predicate
      (lambda (c)
        (if (char-equal c ?\") t (electric-pair-default-inhibit c))))

私のブログ投稿からの参照:https : //www.topbug.ne​​t/blog/2016/09/29/emacs-disable-certain-pairs-for-electric-pair-mode/


1
これは私にはうまくいきません。二重引用符は引き続きペアになります。
ベン

@Benあなたが持っているemacsのバージョン。その情報を質問に追加してください。emacs -Q(答えはコマンドラインオプションで開始されたemacs)でこの回答のコードを試してください-Q。おそらく他のパッケージが干渉しています。このコードは、2017-09-11のGNU Emacs 25.3.1(x86_64-unknown-cygwin、GTK +バージョン3.22.20)で動作します。
Tobias

まだコメントできないので、回答を追加しています。@xuhdevには正解がありますが、理由がわからないので、評価するときにシステムでよくわかりません:(setq electric-pair-inhibit-predicate(lambda(c)(if(char-equal c?\ ")t(electric -pair-default-inhibit c))))(lambda(c)(if(char-equal c 34)t(electric-pair-default-inhibit c)))が表示されるので、Mx Customize-variableを選択して、electricを選択します-pair-inhibit-predicate、次にvalue-menu関数から選択し、ボックスに次のように書き込みます:(lambda(c)(if(char-equal c?\ ")t(electric-pair-default-inhibit c)) )このようにして、emacでの私の構成で機能します
D. Dimakakos '18

コメントの代わりに疑似回答を投稿しないでください。「評判」ポイントを少し獲得すると、コメントできるようになります。なぜと?\"して出力されるのか疑問に思うなら34、それは"文字が整数と同じだから34です。Emacsでは、文字は特定の範囲の正の整数です。
ドリュー

これは、electric.elバージョンの問題である必要があります。使用していGNU Emacs 24.3.1 (x86_64-redhat-linux-gnu) of 2016-01-13ます。
ベン・

3

できないようです。さまざまなカスタマイズでは、ペアを追加することしかできません。

別のパッケージを使用してペアリングを行う場合は、smartparensを試すことができます。次のように、引用符をペアにしないように設定できます。

(sp-pair "'" nil :actions :rem)
(sp-pair "\"" nil :actions :rem)

smartparensには、すぐには明らかにならない電気ペアのいくつかの微妙な機能がないことに注意してください。あなたがそれを乗り越えることができるなら(またはそれらを自分で変更するなら)とにかく切り替えることは価値があるかもしれません。Smartparentsには他にも便利な機能があり、はるかに柔軟です。
jcaw

smartparens、@ JackCCにない微妙な電気ペア機能に言及できますか?
Omar

私が切り替えてからしばらく時間が経過しているため、これらは間違っている可能性がありますが、頭の上から離れています:カーソルの直後に(またはその間に空白がある)右中かっこelectric-pairがある場合、左中かっこを入力すると、既存の右中かっこが尊重されますブレース。ではsmartparens、厳密モード(他の強力な副作用がある)でない限り、常に新しい閉じ括弧が作成されます。たとえば、次のように|)- > (|)でのelectric-pair|)> - (|))smartparensインチ パイプ記号|はカーソルを表します。
jcaw 2016

同様に、electric-pairカーソルが閉じ中括弧の間に空白があるだけで4行下に閉じ中括弧があり、その閉じ中括弧を入力すると、下の中括弧が置き換えられ、カーソルと同じ高さになります。smartparens厳密モードでない限り、それは起こりません。これは、lispのようなもの(または、Pythonのようなものでも、正直に言うと)を編集するときに便利なショートカットです。これは、s式のフォーマットの認識オーバーヘッドを減らすためです。しかし、それはバランスブレースをさらに混乱させる可能性があります。
jcaw

私はelectric-pairまた、現在のモードの構文テーブルからそのペアを継承するとsmartparens思いますが、すべてのペアで明示的にプログラムする必要があります。私はそれについて間違っているかもしれません。
jcaw

2

更新:Emacsのコードに干渉しないため、@ xuhdevの回答が推奨されます。

カスタマイズ可能な機能をリクエストする価値があるかもしれません。現時点では、問題のコードを変更するのは簡単です。

その後、電気ペアのポスト自己挿入関数の独自のバリアントをロードします

elec-pair.elを開き、そこからコピーします

(defun electric-pair-post-self-insert-function ()
[ ... ] )

次に、身体を調べて

(memq syntax '(?\( ?\) ?\" ?\$))

そして?\"そこから削除します、すなわち

(memq syntax '(?\( ?\) ?\$))

他の場所では削除しないでください(!)

再ロード、つまり変更された関数を評価します。

次のセッションでリロードするには、それを「my-changed-stuff.el」というファイルに入れ、これをinit-fileからロードします。


これは、emacs 24.3.1で機能する唯一のソリューションです。
ベン・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.