コマンドラインからvimを起動して、\を含む特定のコマンドを実行するにはどうすればよいですか?


8

私の~/.vimrc場合、ほぼ次のように定義されたコマンドがあります。

nnoremap <expr> <Leader>n ':new ~/Notes/' . strftime('%F') . '-'

ファイル名に現在の日付を含むノートファイルを作成するために設計されています。キーバインドは、コマンドラインにカーソルを置いたままにして、メモのトピックを入力してを押すように設計されていますReturn

これは、vim内から機能します。ただし、vimを開いてこのコマンドを起動するために使用できる端末コマンドも指定しようとしています。私はもう試した:

vim -c '\n'

(私のリーダーはデフォルトのに設定されていますが\、変更しない方がいいでしょう)

ただし、これは機能しません。代わりに、コマンドラインの処理中エラーが検出されました。E10:\の後に/ 、? または&。これがvimのバグなのか、何か間違っているのかわかりません。私も試しました:

vim -c '<Leader>n'

しかし、これは与える:E488::後続の文字:コマンドラインの処理中にエラーが検出されたNキーを押して続行するために、コマンドを入力するか、または入力します

私が望むものを達成する方法はありますか?

回答:


5

新しいエントリを作成する関数を作成し、その関数をマッピングの一部として使用できます。

nnoremap <leader>t :call NewEntry()<cr>
function! NewEntry()
  let title = expand('~/Notes/') . strftime('%F') . '-' . input("Title: ")
  execute 'edit ' . title
endfunction

@Carpetsmokerで説明されているように、マッピングを呼び出すことができます。

vim -c 'execute "normal \\t"'

カール、素晴らしい、ありがとう!これは、名前の入力ももう少しエレガントに処理します。これは素晴らしいことで、マッピングの呼び出しを含め、すべて機能するようです。
Andrew Ferrier、2015

問題ありません。問題なく機能しています。
Karl YngveLervåg、2015

7

-c通常モードではキーバインドを実行しません。コマンド(通常はで実行するもの)を実行します:。したがってexecute、動作するように見えるコマンドを使用する必要があります。

$ vim -c 'execute "normal \\t"'

\\シェルコマンドを発行しているので、doubleが必要です(シェルがこれをエスケープシーケンスとして解釈しないようにする必要があります)。

キーバインドでテスト:

nnoremap <Leader>t :echo "TEST!"<CR>

:execute "normal <Leader>t"仕事に行けません。何も設定せずにデフォルトのを使用するとエラーが発生するため、の値を取得することmapleader も少し複雑です。mapleader\


はい、あなたのテストは私にとってもうまくいくようです。しかし、それは私のnnoremapマッピングでは機能しません。それは、マッピングで<expr>を使用しているためかどうかと思います。調査中...
Andrew Ferrier

nnoremap <Leader>x ':new ~/Desktop/x.txt'<expr>を削除するためにマッピングを簡略化してみました。ただしvim -c 'execute "normal \\x"'、「コマンドラインの処理中にエラーが検出されました:E78:不明なマーク」と表示されます。何か考えはありますか?
Andrew Ferrier、2015

@AndrewFerrierええ、マッピングで動作させることはできません:-/ ...この問題のより良い解決策は、おそらくVimEnterautocmdなどを使用することでしょうか?...今は調査する時間がないので、今夜他にだれも答えを見つけられなかった場合は、調査します(この答えはとりあえず残しておきます)。私が持っている/使用したいものがある場合のソート:-)
Martin Tournoij

心配はいりません、急いでいません。それは今の私の好奇心に過ぎません。これまでのポインタをありがとう。
Andrew Ferrier、2015

2

あなたの目標がmapleaderを使用することであり、それを.vimrcで再定義する場合

mapleader = '、'

それはうまくいきません。使用できます

$ vim -c 'execute "normal ".get(g:,"mapleader","\\")."t"'

代わりに。

ただし、コマンドラインからその機能を使用する場合は、関数の機能をカプセル化して直接呼び出す方が適切です。

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