9

以下は、vim プラグインの vim スクリプトです。

vim の構文は少し奇妙です。

  1. !exists("*s:SetVals")、なぜ彼らの前にスターマークがあるのs:ですか?
  2. 関数!、なぜ!文字があるのですか?
  3. &iskeyword、これは変数ですか? はいの場合、どこで定義されていますか?
  4. s:とは何g:ですか、それらの違いは何ですか?
  5. let を使用する必要があるのはなぜですか。など、let &dictionary = g:pydiction_locationに変更できます&dictionary = g:pydiction_locationか?

if !exists("*s:SetVals")

  function! s:SetVals()
      " Save and change any config values we need.

      " Temporarily change isk to treat periods and opening 
      " parenthesis as part of a keyword -- so we can complete
      " python modules and functions:
      let s:pydiction_save_isk = &iskeyword
      setlocal iskeyword +=.,(

      " Save any current dictionaries the user has set:
      let s:pydiction_save_dictions = &dictionary
      " Temporarily use only pydiction's dictionary:
      let &dictionary = g:pydiction_location

      " Save the ins-completion options the user has set:
      let s:pydiction_save_cot = &completeopt
      " Have the completion menu show up for one or more matches:
      let &completeopt = "menu,menuone"

      " Set the popup menu height:
      let s:pydiction_save_pumheight = &pumheight
      if !exists('g:pydiction_menu_height')
          let g:pydiction_menu_height = 15
      endif
      let &pumheight = g:pydiction_menu_height

      return ''
  endfunction     

終了

4

3 に答える 3

22

1. !exists("*s:SetVals")、なぜ s: の前にスターマークがあるのですか?

アスタリスクは、存在する関数の特別な構文であり、SetVals という既存の関数があるかどうかを確認していることを意味します。オプションiskeywordはでチェックできexists("&iskeyword")、 ex コマンドechoexists(":echo")

見る:h exists(

2. function!、なぜ ! キャラクター?

感嘆符は、関数が既に存在する場合に置き換えられることを意味します。

見る:h user-functions

3. &iskeywordこれは変数ですか? はいの場合、どこで定義されていますか?

それはvimオプションです。で設定されているかどうかを確認できます:set iskeyword?

4.s:とは何g:ですか。それらの違いは何ですか?

これらは、次のシンボルの範囲を定義します。s:は、シンボルがスクリプトに対してローカルであることをg:意味し、シンボルがグローバルであることを意味します。

:h internal-variablesて、s:見て:h script-variable

5.なぜlet使用する必要があるのですか? のようなlet &dictionary = g:pydiction_location, can i change it to be &dictionary = g:pydiction_location

Vimscript は、変数をキーワードで宣言する必要がある言語の 1 つです。よりも簡単に変数を宣言する方法はないと思いますlet

于 2012-09-27T16:02:28.997 に答える
6

それらのいくつかについてお答えできますが、最近の質問に触発された一般的なコメントから始めましょう。

ほとんどの質問に対する回答は、Vim の非常に詳細なドキュメントに非常に明確に記載されています。Vim を真剣に使用する場合は、その使用方法を知っている必要があります。から始めて:help、注意深く読んでください。それは支払う。私を信じて。

これらすべてのサブクエスチョンに対する答えは、 にあります:help expression

  • !exists("*s:SetVals")、なぜ彼らの前にスターマークがあるのs:ですか?

    を参照してください:help exists()

  • function!、なぜ!文字があるのですか?

    感嘆符がない場合、スクリプトを再ソースしても、Vim は以前の定義を置き換えません。

  • &iskeyword、これは変数ですか? はいの場合、どこで定義されていますか?

    これが、スクリプト内の vim オプションの値をテストする方法です。を参照してください:help iskeyword

  • s:とは何g:ですか、それらの違いは何ですか?

    これらは名前空間です。見る:help internal-variables

  • なぜlet使用する必要がありますか?let など&dictionary = g:pydiction_location、 に変更できます&dictionary = g:pydiction_locationか?

    いいえ、できません:let。変数を定義または更新する方法です。それに慣れる。

于 2012-09-27T16:01:45.347 に答える
3

を参照してください:help eval.txt。ほとんどのvimscript構文について説明しています。

于 2012-09-27T15:55:12.017 に答える