問題タブ [viml]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
vim - マクロでの exe モードの終了
再フォーマットしようとしていた大きなファイルがあり、複製ごとに 2 から 100 行の 2 番目から n 番目の繰り返しセットを削除する必要がありました。
データは次のように見えました
最初のインスタンスの後の要素の繰り返しを削除したかったので、もちろん複雑になりました:)そして、次のようなマクロを実行しました
マクロでは、現在の行の最初の要素をレジスタ p にヤンクし、次に行を処理して、最初の要素をレジスタにヤンクしo
てから、マクロ内で実行します
これで、手動で1回か2回エスケープしてから コマンドを実行するまで@p<>@o
、:norm! j
パーツがモードのままだった行に到達した場合を除いて、これは問題なく機能しました。:
:norm! j
私はより簡単な方法で問題を解決しましたが、なぜそれが :ex モードを離れないのが else の部分だけだったのか知りたいです。
vim - Vim内からエスケープシーケンスを送信する方法は?
そのため、最近 Apple は、ターミナルのステータス バーに作業ディレクトリとファイルを表示するためのサポートを含めました。(現在のファイルを設定するために) 送信する必要があるエスケープ シーケンスは次のとおりです。
wherePt
は、file://
現在編集中のファイルを指す URL です。それで、Vim にこのコマンドをエスケープ シーケンスとして送信させることができると考えましたが、少し問題があります。私はこれまでのところこれを持っています:
しかし、私はそれがそのようにうまく機能しないと感じています。また、現在のファイルをfile://
URL として取得する方法もわかりませんが、netrw が役立つのではないかと思います。何か案は?
編集
これまでのところ、私はこれを持っています:
しかし、まだ機能していません-$HOSTNAME
拡張されていません。これを拡張する方法についてのヒントはありますか?
編集 2
わかりましたので、引用符と exports にいくつかの変更を加えました$HOSTNAME
。これで、これは正常に印刷されます。しかし、エスケープ シーケンスを文字通りエコーする代わりに、vim はそれらを のよう^[
に出力しているため、役に立たなくなります! そして、ここで私の本当の質問が来ます.vimにリテラルエスケープシーケンスをシェルに送信させるにはどうすればよいですか?
成功!
最終的なコードは次のとおりです。
vim - Vim: NERDTreeCWD と NERDTreeClose を切り替えるショートカット
同じショートカットを使用して、NERDTree 内のファイルにジャンプし、NERDTree を閉じることができるようにしたいと考えています。私は VimL の経験がなく、助けが必要です。
vim - omnifunc から呼び出されたときに getbufline に現在の行がない
現在、特定の言語のカスタム omnifunc を定義できるようにする vim 用のプラグインを作成しようとしています。
getbufline
(現在のバッファの内容を取得するために) を呼び出すと、現在の行の内容ではなく空の行が結果に含まれるという事実を除けば、これをほぼ機能させることができます。
ここに私が現在使用している機能があります:
これに関する奇妙な部分は、vim から関数を呼び出すとechom statemachine#GetCurrBuffContents()
、出力が期待どおりに表示されることです。つまり、各行が\n
文字で区切られています。
例: バッファには次が含まれます
カーソルが 2 行目にあるときに (オムニコンプリートをトリガーするために) cx co を押すと、次のように表示されます (プラグイン内でエコーアウトします)。
input signal x^@^@^@state State2^@if x == false goto State2^@end
を実行するechom statemachine#GetCurrBuffContents()
と、次のように表示されます。
input signal x^@input^@^@state State2^@if x == false goto State2^@end
関連するコードは次のとおりです 。
編集:修正されたので、現在使用しているコードを次に示します。そのコードが存在する理由については、Ingorの回答を参照してください
vim - インデント レベルに依存する構文領域を定義する
Vim で reStructuredText 用の軽量な構文ファイルを作成しようとしています。まず、リテラル ブロックは、行末に "::" があると開始します。
ただし、リテラル ブロックは、インデントされているがリテラルではない他の構造内にある場合があります。
問題は、インデントを検出する領域をどのように作成するかです。私は次のルールでそれを行いました:
これはかなり問題なく動作しますが、問題があります。「開始」によって一致する必要がある行に表示される一致または領域は、構文規則を引き継いでしまいます。例:
状況を引き継ぐ「リンク」ルールがあるため、私のルールは機能しません。これは、ms
およびme
一致するパラメーターが、行全体に色を付けるだけなので、それらを取り除くことができないためです。
それについて何か助けはありますか?
ありがとう!
vim - NERDTree にあるかどうかを確認します
NerdTree docs によると、NERDTree を最大化 (ズーム) して最小化することShift-a
が重要です。
通常の分割ペインの最大化/ミニ用に .vimrc を構成しました
したがって、基本的にvimで通常のウィンドウをズームするには、 と を押しSpace -
てズームアウトしSpace +
ますが、NERDTreeがオンの場合、これはうまく機能しません。NERDTree をオンにするSpace -
とズームインしますが、押しSpace +
てもズームアウトしません。コード ウィンドウと NERDTree ウィンドウの両方に同様に当てはまります。
vim - テキストを正当化する、単語間のスペースを分割する方法は?
テキストを両端揃えにする新しい関数を作成しています。いくつかのプラグインがあることは知っていますが、それらは私がやりたいことをしないので、自分で関数を作成することにしました。
前:
後:
私が最初にしたことは、単語の数とスペース以外の文字の数を見つけることです(テキストのすべての行について):
次に、スペースを見つけるには:
単語間のスペースを分割する必要があります。
ただし、多くの場合、浮動小数点数です。
ペspaces = 34
nr.words-1 = 10
SpacesBetweenWords = 3.4
私がやりたいことは、次のように単語間のスペースを分割することです:
Spaces between words:
4 3 3 4 3 3 4 3 3 4
そしてそれらをリスト 'SpaceList' に入れます
そして、それらを単語の間に挿入します
(列 = 私のブロック選択または行全体)
私の例
3 3 3 3 3 3 3 3 3 3
(スペース = 30)ですべての整数 pe を含むリストを作成するのは簡単
ですが、単語間を区切るためにまだ 4 つのスペースがあります。
私の問題は、「これらのスペースを単語数でどのように分割できるか」です。