変数の設定またはモードの有効化時にnilと0、またはtと1を選択する方法


19

nil0および/または-1いくつかの機能を無効にするために使用されt1および/または+1いくつかの機能を有効にするために使用されることを理解しています。変数を割り当てる場合、またはマイナーモードを有効/無効にする場合、どちらを選択する必要がありますか?

これらのバリエーションのすべてが、ある時点で使用されるのを見てきました。実際にそれらの間に違いがあるのではないかと思うようになります。私は時々使うの0がうまくいかないのを見てきましたnil。使用場所に違いはありますか?


1
私はあなたが尋ねていると思うことをより明確に述べるために質問を書き直しました。間違っている場合は、編集を元に戻してください。
nispio

@nispio編集は大丈夫です。どうもありがとうございました。:)
greduan 14年

回答:


17

TL; DR

変数を設定する前に、その変数の解釈方法を知っておく必要があります。同様に、(マイナーモードの切り替えに使用される関数を含む)関数を呼び出す前に、その関数の引数がどのように解釈されるかを知っておく必要があります。

C-hfおよびC-hvを使用して、問題の関数または変数のドキュメントを調べます。予想される値を指定する必要があります。

「Non-nil」とは、文字通りではないものを意味しnilます。これには0負の数が含まれます。


マイナーモード

具体例を見てみましょう。入力C-hfblink-cursor-mode とヒットRETのための機能のドキュメントを参照してくださいblink-cursor-mode

(点滅カーソルモードとオプションのARG)

カーソルの点滅を切り替えます(カーソルの点滅モード)。プレフィックス引数ARGを使用して、ARGが正の場合は点滅カーソルモードを有効にし、そうでない場合は無効にします。Lispから呼び出された場合、ARGが省略されているかnilの場合、モードを有効にします。

次のいずれかの方法で、点滅カーソルモードを有効にできます。

(blink-cursor-mode)           ; Omitted argument
(blink-cursor-mode 1)         ; Positive argument
(blink-cursor-mode t)         ; True argument
(blink-cursor-mode nil)       ; nil argument (don't use this)

tdoc文字列で特に言及していなくても、引数が機能することに注意してください。これがよくあるケースですが、最も安全な方法は、doc文字列が使用するように指示したものを使用することです。この場合、これは正の値です。

また、の引数が機能nilすることに注意してください。nilあなたの意図が不明瞭になるので、このように反対することを強くお勧めします。私があなたのLispコードをざっと読んでいて、nil議論を見たなら、あなたはマイナーモードを無効にしたいと思うでしょう。

またblink-cursor-mode、次の方法で無効にすることもできます。

(blink-cursor-mode 0)         ; Non-positive argument
(blink-cursor-mode -1)        ; Negative argument

繰り返しますが、これはこのマイナーモードを無効にする方法の1つでnilはありません。これは、発生するほとんどすべてのマイナーモードに当てはまります。


変数

次に、変数の例を見てみましょう。入力C-hvtruncate-linesRETて、変数のドキュメントを確認しますtruncate-lines

truncate-linesは、「Cソースコード」で定義されている変数です。

非nilは、継続行を表示しないことを意味します。代わりに、テキストの各行に1画面行のみを指定してください。

次のいずれかの方法で切り捨てをオンにできます。

(setq truncate-lines t)       ; Boolean true value (non-nil)
(setq truncate-lines 1)       ; Positive value (non-nil)
(setq truncate-lines 0)       ; Zero value (non-nil)
(setq truncate-lines -1)      ; Negative value (non-nil)

そのあなたを驚かせるかもしれません0し、-1動作します。繰り返しますが、あなたの意図が不明瞭になるので、それらの使用はお勧めしません。

切り捨てを無効にする唯一の方法は次のとおりです。

(setq truncate-lines nil)     ; nil value

言い換えるtruncate-linesと、数値、文字、文字列、リスト、または評価されない限り、切り捨てnil有効になる限り、他の任意の値に設定できます。(ただし、tまたはに固執する必要があります1)。


これで私の質問に答えました。ありがとうございました。:)
greduan 14年

0

これらはすべて異なるものです。0、1、および-1は異なる番号です。nilシンボルです。

それらは、多くの異なることのために、あちこちで使われています。それぞれのために使用されているものを見つけるために、特定のコンテキストではそのコンテキストのドキュメントを参照してください。また、さまざまなモードをオンまたはオフにするコンテキスト、変数を使用してさまざまなものを有効または無効にするコンテキスト、および他の多くのコンテキストが含まれます。

要するに:

  • あなたの質問はあまりにも広すぎて有用ではありません。
  • ドキュメントを参照する必要があります:(a)一般的に、Emacs Lispについて少し学ぶため、および(b)特定のコンテキスト(たとえば、特定のモードのドキュメント)。

通常、特定のモードのドキュメントには、オンとオフを切り替える方法が記載されています。何かに1または-1 nilまたは非-を使用するように指示されている場合nil、それが意味します。モードをオンまたはオフにするための一般的なルールがいくつかあります(対話式およびLispコードから)。しかし、一般的な背景を取得することから始める必要があるようです。

Emacsのドキュメントを参照して、Emacs自体にヘルプやその他の情報要求する方法、変数の値を確認する方法、変数または関数(モードをオン/オフにする関数を含む)のドキュメントを確認する方法、 等々。

あなたは、することができます使用することにより開始 C-h C-hCtrl-h Ctrl-hEmacsのヘルプシステムについて学ぶために、)。そしてそこからビルドします。

C-h rEmacsマニュアルに移動します。Emacsチュートリアルを試してくださいC-h t。Emacs Wiki NewbieページとLearningEmacsに関するページを確認してください。

Emacs Lisp:について学習を開始C-h iするには、という名前のマニュアルを選択し、Emacs Lisp Intro読み始めます。そして、Emacs Lispの学習に関するEmacs Wikiページを確認してください。


1
ご回答有難うございます。:)どのコンテキストで使用されているのかを聞いていたと思います。ありがとうございました。:)私はシンボル間の主な違いを知っnilています。たとえば、falseとttrueの論理的等価はどうで、残りは単なる数字です。しかし、私はそれらが通常どのような文脈で使用されているのか確信が持てませんでした。
greduan 14年

モードに関する一般情報について書いたものを参照してください(マニュアルにリンクされています)。このような一般的な情報にもかかわらず、常に興味のある特定のモードのドキュメントをチェックすることから始めてください。オンまたはオフにするために何を使用するかを教えてくれます。そうでない場合は、マニュアルで説明されている一般的な動作が適用されますが、特定のモードdocで開始します。重要なのは、それ自体の違いではありません。ポイントは、特定のコンテキストでの使用方法の違いです。そのためには、コンテキストを尋ねることから始めます。
ドリュー

1
OK。どうもありがとうございました。:) Emacsが独自のSEサイトを手に入れたのは素晴らしいことですね。
greduan

1
PS心配しないでください。一般ルールの一部については他の人がここで豆をこぼすと確信しています。;-)(a)この学習について念頭に置いて書かれているので、(a)これについてドキュメントを参照してもらい、(b)常に特定のモードについてそれ自体について尋ねることから始めたいと思います。一般的な規則はモードの詳細に勝るものではありません。後者を無視すると、物事を見逃してしまいます。
ドリュー

クールになるのは、SEが独自のEmacsモードを取得するときです。;-)
ドリュー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.