1行でvim関数を定義するにはどうすればよいですか?


2

|コマンドを分離するために使用されるため、私はこれを行うことができると思いました:

:function! SomeFunc() | return 0 | endfunction

別の行に入力すると正常に機能します(最初の行を入力すると、残りの行の入力が求められます)。

:function! SomeFunc()
  return 0
endfunction

私は今この警告を見ます:help :bar

これらのコマンドには「|」が表示されます その引数として、したがって、別のVimコマンドを続けることはできません。

:関数

それを回避する方法はありますか?

私はそれが言うところを見る...

'|'と同じ方法でコマンドを区切ることもできます。挿入するには、CTRL-V CTRL-Jを使用します。「^ @」が表示されます。

しかし、これも機能しません:

:function! SomeFunc() <NL> return 0 <NL> endfunction

このエラーが発生します:

E488: Trailing characters

これは、CTRL-V CTRL-Jシーケンスを手動で入力すると機能します。

:function! SomeFunc() ^@ return 0 ^@ endfunction

しかし、それはまだ受け入れられる解決策ではありません。コマンドをコピーして貼り付け、function!Enterキーを押したいだけです...


関数定義の複数行バージョンをコピーして貼り付けることができると思います...しかし、コピーアンドペースト可能な1行で定義する方法があるかどうかはまだ知りたいです...
Tyler Rick

2
最終的な目標は明確ではありませんが、関数をヤンクしてで「ソース」できます:@"
ロメインル14

このQを促した元の問題は、自分の.vim scripts / configで使用したいプラグインの関数を見つけたが、としてのみ呼び出し可能であったことでした<SNR>104_mixedcase()。独自のラッパー関数を作成して、それを「エクスポート」し、どこからでも簡単に使用できるようにしました。しかし、スクリプトファイルで新しいラッパー関数を定義することはできませんでした。明らかに<SNR>はその(間違った)ファイルに関連しているためです。ただし、vimコマンドラインで関数を貼り付けただけで機能するように見えました。だから私は、私は...単一行/コマンドとしてそれを貼り付けることができれば、それはいいだろうと思った
タイラーリック・

素晴らしいアイデア、ありがとう!レジスタの内容を入手するための:@を知らなかった。それ(vimレジスタ)はうまく機能します-システムクリップボードにコピーして貼り付けてからvimに戻すよりも良いでしょう。
タイラーリック14

<SNR>104_「スクリプト番号104」を意味します。スクリプトを見つけ:scriptnamesて、vimrcに関数をコピーできます。
ロメインル14

回答:


5

1つのオプションは、使用することexeです。

exe ":function! SomeFunc() \n return 0 \n endfunction"

\n文字は、二重引用符で囲まれた文字列で改行として解釈されます。これは、特別なシーケンスをエスケープすることに注意する必要があることを意味します。

とはいえ、

関数を単純にコピーして貼り付けたいです!コマンドを入力し、Enterキーを押します...

ロメインルが述べたように、あなたの究極の目標は明確ではありません。これが何らかの理由で頻繁に行うことである場合、おそらくあなたが望むものを得るためのより良い方法があります。この機能が必要な理由の観点から問題を説明することをお勧めします。


いい答えだ。それは理にかなっており、うまくいくようです。上記のコメントとして動機を追加しましたが、基本的には単なる理論/学習の質問に変わりました。その結果、いくつかの新しいトリックを学びました、ありがとう!
タイラーリック14

1
プラグインで便利な機能を見つけましたが、スクリプトローカルです。たまに起こります。このような場合、関数をローカルファイルにコピーし、グローバル(または自動読み込み)にするため、簡単に呼び出すことができます。それはコピーパスタですが、それが単なるユーティリティ関数であるなら、大したことではないと思います。とにかく、新しいトリックを学んだと聞いてうれしいです。これがこのような実験の価値です:)。
アンドリューラデブ14

1

.vimrcに追加する前に、vimセッションでオンラインでコピーした機能をテストしたかったため、これを検討していました。試しましsourceたが、ファイル名が必要です。

答えセクションのコメントの1つは使用するように言います:@"。名前のないレジスタにあるものは何でも実行されます。

オンラインからコピーしたものを実行したい場合は、できます:@+。ただし、システムクリップボード統合でvimがインストールされていない場合は機能しません。

クリップボード統合なしで機能する別の方法は:normal :<PASTE YOUR COMMAND HERE WITH YOUR SYSTEM HOTKEY>です。まるで自分で入力しているかのように、すべてが通常モードで実行され、各改行は関数の次の行に続きます。

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