タグ付けされた質問 「ex-mode」

Vimのexモードは、バッチ処理用に設計されたコマンドラインモードに似ています。

8
Exモードには実用的な用途がありますか?
Vimには、を入力することで入力できるExモードQと、で入力できるコマンドラインモードがありますq:。新しいvimユーザーの間でよくある不満は、vimを終了しようとしたときに誤ってこれらのモードに入ることです。そのため、私はこれらのキーを無効にして、~/.vimrc誤って(特にq:)ヒットしないようにします。 map q: <Nop> nnoremap Q <nop> Exでvimのドキュメントを読んで中程度の経験を持つVimユーザーであり、その背後にある基本的なアイデアを理解していますが、それでも日常のvimの使用でその使用を見つけるのに苦労しています。一般に:、変更はすぐには反映されないため、接頭辞が付いた標準のvimコマンドラインコマンドを入力するよりも有用ではないようです。 Exには、現代のVimでの実用的な日常使用がありますか Exモードでは、標準コマンドよりも簡単にできることはありますか?コマンドラインモードとexモードの違いは何ですか?
115 ex-mode 

1
非インタラクティブにファイルを編集する方法(パイプラインなど)
パイプライン入力で渡されたファイルを非インタラクティブな方法でvimを使用して編集するか、インプレースでファイルを編集します(と同様sed)。 以下を使用したいくつかの例sed: $ sed -i'.bak' s/foo/test/g file # Edit file in-place. $ cat file | sed s/foo/test/g # Parse file in pipeline. しかし、私はここで読むことができました: sedあるS tream ED itor、ないファイルエディタが。それにもかかわらず、どこでも人々はファイルを編集しようとするためにそれを乱用する傾向があります。ファイルは編集しません。 次に、インプレース編集(-i)などの一部のオプションは移植可能です。 vimで同じ機能をどのように実現できますか?

2
vimで:openは何をしますか?
Vimのドキュメントには、:openコマンドについて次のように記載されています。 This command is in Vi, but Vim only simulates it: *:o* *:op* *:open* :[range]o[pen] Works like |:visual|: end Ex mode. {Vi: start editing in open mode} :[range]o[pen] /pattern/ As above, additionally move the cursor to the column where "pattern" matches in the cursor line. Vim does not support open …
18 ex-mode 

1
ex入力モードを終了するにはどうすればよいですか?
と入力すると、ex入力モードで止まってしまいました:i。これで、コマンドを使用できなくなりました。すべてがテキストの文字列です。エスケープを押しても、そこから:visual抜け出すことvisualはできません。タイピングしても、そこから抜け出すことはできません。どうすれば抜け出すことができますか?
16 ex-mode 

1
指定された行からファイルの最後までのパターンに一致する行を削除します
たくさんのコメントが含まれているファイルがあり、たとえば、3行目からファイルの最後までのコメントをすべて削除したい場合、どのようにすればよいですか? 私が最初に試したことは、私が望んでいることをまったくしていないように見えるので、私は行き詰まっています。 :3,$/^#/d パターンを探して、3からファイルの末尾までの範囲の行を削除する代わりに、3からパターンに一致する行までのすべての行を削除してから停止します。 では、exコマンドをある範囲の行に適用するにはどうすればよいですか。この場合、それはファイルの終わりまでですが、マーク、または行10と20の間、またはその他の範囲の間で行う場合とは異なるのでしょうか?
10 ex-mode 

2
コマンドラインから標準出力にバッファ全体を書き込む方法は?
バッファ全体を/dev/stdoutファイルではなく標準出力()に書き込みたいのですが、次のコマンドはファイルの編集中に期待どおりに機能します。 :w >> /dev/stdout ヒント:Control+ Lを押して画面を更新します。 しかし、コマンドラインから(非対話的に)同じことを行おうとすると、期待どおりに機能しません。たとえば、次のようになります。 $ echo This is example. | vim - '+:w >> /dev/stdout' '+:q!' Vim: Reading from stdin... 同じ:w !tee、:x! /dev/stdout、:%printおよび同様。 終了する前に、それは言っています:[Device] 1L, 17C appended。 パイプの途中でvimに標準入力を標準出力に強制的に書き込む方法はありますか?多分それは何とか緩衝されていますか?

2
exコマンドを使用して、2つの行が同一かどうかを確認しますか?
私はこの質問を見ていて、純粋に POSIX を使用sedする私の答えを どのように実装できるのか疑問に思いました。ex 秘訣はsed、ホールドスペースとパターンスペースを比較して(とG;/^\(.*\)\n\1$/{do something})が完全に等しいかどうかを確認することは できますが、ではそのようなテストを行う方法がないことですex。 Vim Yでは、最初の行をアンクしてから入力 :2,$g/<C-r>0/dして、指定したことをほぼ実行できます。ただし、最初の行に非常に単純な英数字のテキスト以外が含まれている場合、行は正規表現としてダンプされるので、これは実際に不自然になります。 、比較のための単なる文字列ではありません。(最初の行にスラッシュが含まれている場合、行の残りの部分はコマンドとして解釈されます!) したがってmyfile、最初の行と同じであるすべての行を削除したい場合(ただし、最初の行は削除しない場合)は、どのように使用できexますか?それについて、私はそれをどのように使用できviますか? 別の行と完全に一致する行を削除するPOSIXの方法はありますか? おそらくこの架空の構文のようなもの: :2,$g/**lines equal to "0**/d

1
Exスタイルの置換コマンドで連続番号を使用するにはどうすればよいですか?
たとえば、「Do」という単語で始まるすべての行の前に数字を入れたいとしましょう。コマンドはの:%s/^(Do )/1. \1/ようになりますが、毎回同じ番号ではなく連続して番号を適用するにはどうすればよいですか? マクロとCtrl-Aを使用してこれを行う多くの方法をよく知っていますが、より複雑なExモードコマンドで使用するために、タイトルの質問に対する答えを正確に知りたいことに注意してください。 マクロアプローチがそれほど簡単ではない別の例として、「Section」という単語のすべてのインスタンスに番号を追加し、それらに連続番号を付け、「Chapter」で始まる各行の後にカウントを再開したいとします。追加する数を実際に増分することを除いて、これをほぼ実行できるEx-modeコマンドは次のとおりです。 :g/^Chapter/;/^Chapter/-s/Section\zs/ 1/g Exモードの代替コマンドで数値をインクリメントする簡単な方法が非常に役立つことがわかります。

1
グローバルコマンドで一致した各行の数を取得して使用する方法
彼の(非常に良い)本「Pratical Vim」で、Drew Neilは、「TODO」という単語を含むすべての行をレジスターに収集して、後者を使用する方法を示しています。 そのためには、単にグローバルコマンドを使用します:g/TODO/yank A(大文字Aは名前付きレジスタへの行の発生を許可しますa)。 私はそれはかなりクールなトリックだと思いますが、私はそれを改善する必要があります:それは内容の前に行の番号を挿入しようとしています。解決策は、行番号を取得して、前に述べたコマンドの最後の部分でそれを使用することだと思います。問題は、この行番号を取得する方法がわからないことです。 だから私の質問は、グローバルコマンドでどのようにして一致した行の番号を取得でき、この番号をどのように使用できるのですか? ここで明確にするのは例です。このファイルを考えてみましょう: 1 //TODO: Hey this is a todo 2 int main(void){ 3 //TODO: and this is another one 4 printf("Hello world"); 5 6 return 0; 7 } 入力:g/TODO/yank Aしてレジスターの内容をファイルに入れると、次のようになります。 //TODO: Hey this is a todo //TODO: and this is another one 私が入手したいのは: 1 …

1
「標準」の後にexモードコマンドを続行しますか?
繰り返しの編集とリファクタリングを処理するときに、非常に長いマクロをよく使用します。可能な限り、これらをマクロとして記録するのではなく、ex-modeコマンドとして記述します。これは、対話的に(コマンドウィンドウを使用して)編集する方が簡単だからです。 ただし、いくつかの通常モードのコマンドを追加する必要がある場合があります。たとえば、後でマクロで使用するために、行全体ではなく行の一部だけをヤンクしたり、テキストを希望どおりに並べたりする必要があります。 が含まれた後にexモードコマンドを続行する方法はありnormますか? (私が話している種類の複雑さの実際の例については:) :'a+s/\_^\s*\(\S*\)::\_[^>]*>\s*\("[^"]*"\)\s*;\_s*\_$/ "\1", \2,/ | m 'a- | norm f,50a ^[d44| 最後にテキストを追加してexモードコマンドとして実行させる方法はありますか?

1
Exモードと改善されたExモードの違いは何ですか?
2つのvim Exモードがあります。 vi互換のExモード(vim -e -s)、 vimはExモードを改善しました(vim -E -s)。 Vimの改善されたExモードでは、vi互換のExモードよりも高度なコマンドを使用できますが、主な違いは何ですか?またはどこでそれらを見つけることができますか?
8 ex-mode 

2
区切られた行でコマンドを実行する
どのように私は区切られたすべての行でコマンドを実行することができ、で言う \begin{otherlanguage}と\end{otherlanguage}? 例えば、 1 This line should not be affected, 2 \begin{otherlanguage} 3 but this should; 4 \end{otherlanguage} 5 this should not. (cmdはである可能性がありますnorm A test。)


2
レジスタで置換を使用するにはどうすればよいですか?
文字列が格納されているものを登録したとしましょう。ただし、置換コマンドを使用して変更したいとします。 たとえば、5x5のhtmlテーブルがあります。 let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',5).'</tr>',5).'</table>' そして、プレースホルダー(_)を既存のレジスターを変更する(別のレジスターに割り当てるのではなく)ことによって理想的には他のデータに置き換えたいと思います。 私は次の構文を試しました: "ts/_/test/g "@ts/_/test/g " with modifiable set エラーは発生しませんが、期待どおりに機能しません(prefixが%機能するのと同じように)。 それを行う適切な方法は何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.