タグ付けされた質問 「vimscript」

Vimに埋め込まれたスクリプト言語。これを使用して、Vimをニーズに合わせてカスタマイズしたり、プラグインを作成したりできます。VimLとも呼ばれます。

1
1つのキーコマンドのタイムアウト値を変更するにはどうすればよいですか?
私が欲しいもの 特定のキーコマンドのタイムアウト値を一時的に変更するには 私が見たところ :help 'timeout'私があります。 The timeout only happens when the 'timeout' and 'ttimeout' options tell so. A useful setting would be > :set timeout timeoutlen=3000 ttimeoutlen=100 (time out on mapping after three seconds, time out on key codes after a tenth of a second). キーコマンドでこれを実装する方法や、タイムアウトの現在の設定を確認する方法がわかりません。 たとえばhh、行の先頭に移動するように設定したかったのですが、その特定のキーコマンドのタイムアウトを、たとえば100ミリ秒とかなり速くしたかったのです。 私が試したこと :set timeout …

2
ASCII文字で文字を操作する
私が持っているとしましょう let l:letter = 'A' l:letterアスキーコードを受け取り、それを変換する関数はあり'B'ますか?私のようなものを意味します let l:next_letter = l:letter + 1 <Ctrl-A>with set nf=alphaがあることは知っていますが、ドキュメント内の文字の上にカーソルを置く必要があるため、ドキュメントを変更せずに変数を使用してそれを実行できるかどうか疑問に思いました。 ここまでが私が試したものですが、先ほど述べたように、ドキュメントとカーソル位置が変更されます。 fu! s:get_next_char(letter) set nf=octal,hex,alpha call setline(line('$') + 1, a:letter) exe ':normal! G^'."\<C-A>" set nf=octal,hex let l:next_letter = getline('$') normal! Gdd return l:next_letter endfu
8 vimscript 

1
引数付きのシェルスクリプトを呼び出す関数
私は自分のプログラムをコンパイルして実行するbashスクリプトを呼び出す独自の関数を作成しています。 これが私が試したコードです。 function Compile_and_run(game, major, minor) !_compile a:game a:major a:minor endfunction 唯一の問題はa:game、値の代わりに解析されるようです。 どのように私はなるだろうa:game、a:major、a:minor関数にその値を解析するために?

2
ペアのバランスを崩さずに自動的にペアを削除
私は、挿入モードでは、ことができます、ということVIML機能を書いています<BS>(ペアの開口部を通じて[、{それはカーソルの後に次の文字である場合(ペアの閉塞部を削除するなど、)のような多くの自動ペアをおよびvim-autoclose)。不均衡なペアがある場合、ペアの終了部分は削除されないため、この関数は異なります。 例: 形式は<initial> => <result-after-backspace>、カーソルがの前にある場所|です。 ((|) => (|) ((|)) => (|) (|) => | (defn => (defn (|) |) どうすればペアをアンバランスにするかどうかを判断してから、最後のペアを削除できますか? 自動ペアとvim-autocloseの両方をテストしました。両方のプラグインを使用すると、ペアの終了部分は常に削除されます。

2
ファイルの一部を調達する方法
たとえば、vimrcwith :so %やでファイルを調達できます:so <filename>。しかし、ファイルの一部のみを調達する必要がある場合はどうすればよいですか。ファイルの一部を視覚的に選択して:h vソースを取得する方法が必要です。ちょっとemacsのようなM-x eval-region

2
現在の行にテキストを追加するにはどうすればよいですか?
私は現在vimscriptを理解しようとしていて、そのappend()機能を偶然見つけました。ドキュメントには、式を追加する行を指定できると記載されているので、試してみました。 :call append(line('.'), Foo()) Foo() 文字列を返します。 奇妙なことに、文字列は現在の行の次の行に追加されます。だから私はline('.') - 1、現在の行の上にある行に追加されることを確認するためだけに試しました。 現時点では、私は驚き、混乱し、言葉を失っています。 誰かがこれについていくつかの光を当てることができることを願っています。
8 vimscript 

1
neovimと通常のvimを区別する方法はありますか?
vimからneovimに移行しようとしていました。しかし、結局のところ、python3サポートを必要とするプラグインがいくつかあり、neovimパッケージはデフォルトでpython3でビルドされません(私はubuntuにいます。ウェブサイトの公式ドキュメントに従ってneovimパッケージをインストールしてください)。最後に、あきらめました。複雑に見えます。 しかし、今私が直面している問題は、vimに戻す必要があることです。主な違いは、vimディレクトリへのパスです。neovimではパスは~/.config/nvim/、vimではパスは~/.vimです。 vimrcのほとんどの部分を変更しないでおく必要があります。そこで、条件付きステートメントを使用して、現在のvimがneovimか通常のvimかを判断したいと思います。 とにかくこれを達成する方法はありますか?

2
vimrcから呼び出すことができるプラグインでコマンドを設計する方法
ユーザーがカスタムオペレーターを作成できるようにするプラグインに取り組んでいます。オペレーターは、移動するモーションまたはテキストオブジェクトにVimL式を適用します。 クリーンなユーザーインターフェイスを維持する カスタムオペレーターを定義するための最もクリーンなインターフェイスは、コマンドを使用することだと思います。:MapExpress次のようなコマンドを呼び出すコマンドを定義しました。 :MapExpress cd '/* ' . v:val . ' */' これはcd、Cスタイルのコメント区切りでモーションまたは選択を囲むために、ノーマルモードオペレーターとビジュアルモードマッピングを作成します。 もちろん、ここに問題があります。プラグインで定義されているコマンドを.vimrcファイルから呼び出すことはできません。 不十分な回避策 私は完全に満足していないいくつかの回避策を考え出しました。 ユーザーautocmd VimEnter *がコマンドを呼び出すために使用する これは機能しますが、多くの「精神的オーバーヘッド」が追加されます。多くのVimユーザーはどのようにautocmd機能するかをしっかりと把握していないと思います。 ユーザーが~/.vim/after/plugin/コマンドを呼び出すファイルを作成します これも機能しますが、この構成の一部が独自のファイルでオフになり、簡単に失われて忘れられるという欠点があります。 コマンド定義をプラグインのautoload/ディレクトリに移動し、ユーザーがファイルのロードをトリガーするいくつかのメソッドを呼び出して、コマンドを定義します これは次のようになります。 call express#init() MapExpress cd '/* ' . v:val . ' */' 少し良いですがexpress#init()、プラグインが機能するためにメソッドが必要かどうかについて混乱を招きます。 コマンドを使用する代わりの方法 オペレーターを定義するコマンドを使用するいくつかの代替案も検討しましたが、それぞれに注意点があります。 ユーザーは関数を呼び出して演算子を定義します これは次のようになります。 call express#operator('cd', '"/* ".v:val." */"') これはひどいことではありませんが、引用符で囲まれた式が必要になるという欠点があります。式で引用符を使用したい場合は、煩わしいことがあります。 ユーザーが<expr>マッピングを使用 このような: nmap <expr> …

1
数字のプレフィックスが付いたホットキーで何度も機能を実行することは可能ですか?
exコマンドを実行する前に数値の接頭辞を入力した場合、それが適用される規則は、行範囲全体で操作を準備するようにコマンドを設定することです。ドキュメントで説明されています 行数 変更する行数がわかっている場合は、番号を入力してから「:」を入力できます。たとえば、「5:」と入力すると、次のようになります。 :.,.+4 これで、使用するコマンドを入力できます。範囲「。」を使用します。(現在の行) "。+ 4"(4行下)まで。したがって、5行にまたがっています。 今私が扱っているのは私のカスタム関数です、これはこれです: function! MyAmazingEnhancedDot() if v:hlsearch == 1 :normal! .n else :normal! .j endif endfun これは、一連の行または一連の検索一致に対して操作を繰り返すことを含む、反復的なタスクを合理化する方法にすぎません。 この機能はホットキーにバインドされています。以下のようなAlt+ .または何でも。 私の目的は、非常に強力な何かをできるようにすることです:私は入力することができるはず/varName<CR>ciwnew-var<ESC>n9<Alt+.>の10個のインスタンス名の変更を達成するためvarNameにしますnew-var。 これを行うと実際に何が起こるかというと、名前の変更が行われず、9行が.列0の-saved編集操作で操作されているということです。 私はVimが私のキーストロークを次のように解釈しているとしか想定できません:.,.+8 normal! .n。 ガラスの半分いっぱいの側で:normal! .jは、バインドのケースが実際に機能しjます。これは、影響のないモーションはこの状況では影響がないためです。(私はまだjそれが数字の接頭辞のないインタラクティブなユースケースで動作させるために必要です)。 それで私の質問は、Vimがバインドに適用する行拡張動作をどのようにオーバーライドできるかということです。数値接頭辞を引数またはそのようなものとして読み取ることができれば素晴らしいと思います。

2
Pythonを使用してVIMプラグインで新しいコードを開発することの欠点
私が使用するvimプラグインの1つで、今後はpythonとvimscriptの使用を検討しています(https://github.com/python-mode/python-mode/issues/813#issuecomment-344754563)。 Pythonを使用してVIMのプラグイン(https://dzone.com/articles/how-write-vim-plugins-python)を記述できることを理解しています。vimディストリビューションに+python/ +python3があれば、プラグインは機能するはずです。 私はVIMのプラグインをまだ作成していませんが、PythonでのPython開発用のオープンソースVIMプラグインの作成は、VimLで作成するよりも優れていると思います。ソリューションを提案したが、VimLを知らず、それを学びたくないというユーザーが複数いることに気づくでしょう。彼らはすでにPythonを知っており、Pythonで作業しているからです。したがって、今後Pythonで新しいコードを書くことで、より多くのユーザーを獲得し、より多くの貢献者を獲得して、より多くの価値を生み出すことができます。 質問 PythonとVimLを使用してVimプラグインを作成する欠点は何ですか?(このプラグインを使用するすべてのユーザーがPythonを開発するために使用する予定であるため、すでに+python/を持っていると仮定しましょう+python3)

2
lsからbufferにジャンプする方法は?
からバッファ番号を入力してバッファにジャンプする方法はあります:lsか? Press ENTER or type command to continueつまり、このコマンドで、たとえばを押した場合2、何も実行されないと予想されるのはなぜですか? 明らかに、インストールするプラグインはありません.vimrc。少なくとも1つの小さなスクリプトをインストールします。 ありがとう。

1
zGとzWを永続化する
編集:これを小さなプラグインに変えました。これは私の最初の試みであり、私が何をしているかわからないので、どんな助けでも大歓迎です。:) ここにあります:https://github.com/danielbmarques/vim-dialect ---------- 私が使用し続けたいzgとzwグローバルのvimに単語を追加するspellfileのが、私が使用したいzGとzWに単語を追加するためにspellfile 、私が編集していたファイルに固有。言い換えれば、私は各ファイルに対して永続的でzGありたいと思っzWています。 spellfile変更を設定するzgとzwコマンドとコマンドが変更されますが、必要なのはコマンドzGとzWコマンドのみを変更することです。 だから私はこれをやった: :au BufNewFile,BufRead * let &l:spellfile = expand('%:p:h') . '/.' . \ substitute(expand('%:t'), '\(.*\)\..*', '\1', '') . '.utf-8.add' nnoremap zG :call LocalSpell("zG")<cr> nnoremap zW :call LocalSpell("zW")<cr> nnoremap zuG :call LocalSpell("zuG")<cr> nnoremap zuW :call LocalSpell("zuW")<cr> nnoremap zg :call GlobalSpell("zg")<cr> nnoremap zw :call GlobalSpell("zw")<cr> nnoremap zug …

3
コマンド「set」の結果を保存して復元する方法は?
:h :set私たちはそれを知っているから :se[t] デフォルト値と異なるすべてのオプションを表示します。 vimscriptでは、ユーザーが変更したこれらのオプションをすべて保存し、それらを変更して、後でユーザーが設定した値に戻したいと思います。 どうすれば簡単にできますか? :set(または同様のコマンド)の結果を変数に格納し、後でソースまたは別のコマンドに渡して、その内容を復元できる方法はありますか? または、コマンドの出力を手動で解析する必要がありますか(これは実行できますが、より簡単な代替手段が存在する場合、何の作業もありません)。

1
vimの^ @とは何ですか?
メッセージの結果を取得してvimscript変数にリダイレクトするVimscriptを実行しています。vimscript変数の内容が表示されると、^ @が含まれます。それは何を表し、どうすればそれを取り除くことができますか?
7 vimscript 

1
関数の引数の数に制限があるのはなぜですか?
私は読ん:help :callでいます、それは次のように述べています: 関数を呼び出します。関数の名前とその引数は、で指定したとおり:functionです。最大20個の引数を使用できます。 これは私を不思議に思います:なぜ関数の引数の数に一見人為的な制限があるのですか?
7 vimscript 

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