次のコマンドを入力すると、Vimに「E488:末尾の文字」エラーが表示されます。

次のコマンドを入力すると、Vimに「E488:末尾の文字」エラーが表示されます。

私は以下を書きました。vimrc.vim

:filetype plugin on
:let s:save_cpo = &cpo
:set cpo&vim
:let &cpo = s:save_cpo
:set runtimepath = ~/home/nikcha/.vim/plugin
:set fileformat = unix
:function! print_hi()
:echo "Hi..its done"
:endfunction
:map <F7> : call print_hi()<CR>

ファイルを開いて入力すると、「何が間違っている可能性がありますか?」という:F7エラーが表示されます。E488:Trailing Characters

答え1

以下を使用してマッピングを有効に:mapできます。F7ノーマル、ビジョン、セレクト、オペレータ未定モデル。押すと:入りますコマンドラインモード今すぐいいえ書く。

:help map-modes概要については参考資料を参照してください。

オペレータの一時停止モードは非常に具体的であり、サンプル機能は選択には適していないため、(デフォルト)通常モードに制限することをお勧めします:nmap

また、使用する必要があります:noremap;マッピングが再マッピングと再帰の影響を受けないようにします。:nnoremap


コマンドラインモードへのショートカットが必要な場合は、次のように定義します。カスタムコマンド代わりに:

:command! Hi call print_hi()

答え2

コロン

行の先頭のコロンはオプションです。スクリプトの場合、コードをより明確で読みやすくするため、通常は省略されます。コロンはいしかし、後で説明するように、マッピングの内部に必要です。

オプション値の設定

fileformatなどのオプション値を設定するときとruntimepath値の間にスペースを入れないでください。=それが必要です:

set fileformat =unix
" or
set fileformat=unix

これは真ではなく、let変数に値を割り当てるか、オプションを参照するために使用できます。これらはすべて大丈夫です:

let s:foo = "bar"
let &fileformat = "unix"

名前付き関数

独自の関数を作成するときは、名前は大文字で始める必要があります。あなたの場合は次のとおりです。

function! Print_hi()
"         |
"         +----------- Capital

互換モード

保管および復元cpoルーチンは多くの操作を実行しません。これ「正常」あなたがしなければならないことは、それを保存し、スクリプトを作成し、最後に復元することだけです。

let s:save_cpo = &cpo
set cpo&vim

" Rest of script

let &cpo = s:save_cpo

現在のスクリプトと同様に、保存して設定し、隣接する順序で復元します。つまり、完全に省略することも、上記のパターンを使用することもできます。

このルーチンを使用する理由は、ユーザーが互換モード(vimに似ていて、それほどvimに似ていない)にあるかどうかをスクリプトで知ることができないためです。そのため、モードを保存してモードをvimに設定してから最終的に復元するのが一般的です。これにより、問題なくVim関連の機能を使用できます。

書き換えられたスクリプト

全体的に、これはあなたが望む方向にさらに一致するはずです。

let s:save_cpo = &cpo
set cpo&vim

function! Print_hi()
    echo "Hi..its done"
endfunction

map <F7> :call Print_hi()<CR>
"        |
"        +-------------------- Note; here we use colon.

let &cpo = s:save_cpo

マッピング、E488

他の答えはあなたが得る理由を十分に説明しました。

E488:Trailing Characters

間違い。簡単に言うと、このようにマッピングされたらを押しますF7。コロンを最初に押さないでください。 Ingo Karkatは、マップ機能を使用するためのいくつかの素晴らしい提案をしました。

マッピングのコロンは、:Vimにコマンドラインモードに入るように指示します。次にコマンドを印刷しますcall Print_hi()。最後に、<CR>実行コマンドラインを追加します。Enterコマンドを手動で作成するのと同じです。実際には自動キーボードシーケンスになります。

より効果的な書き込み

一般的に言えば、独自のファイルにスクリプトを追加します.vimrc.vimrcスクリプトを作成してテストしたい場合は、単に次のように言うことができます。

  • :so %Enter

高速ロードのために、rcファイルに次のマッピングがあります。

"^O is CTRL-O (i: Ctrl-V Ctrl-S-O; to prevent cursor movement
" Save + Source
inoremap    <silent>    <C-S-F12>  ^O:w<CR>^O:so %<CR>
nnoremap    <silent>    <C-S-F12>    :w<CR>:so %<CR>
" Source
inoremap    <silent>    <C-F12>  ^O:so %<CR>
nnoremap    <silent>    <C-F12>    :so %<CR>

選択したコードだけをインポートする機能もありますが、投稿が少し長くなるから...

答え3

あなたはしないでくださいタイプ :<F7>代わりにF7キーを押してください。これが意味するのは次のとおりです:map <F7> : call print_hi()<CR>

:map        # Map the following printable characters:
<F7>        # # How F7 is seen by vim
:           # to
call        # call a function:
print_hi()  # # previously defined function print_hi
<CR>        # and print a new line.

ビジュアルモード(入力:bla)で関数を呼び出すには、キーストロークを使用せずに入力する必要があります:call print_hi()

関連情報