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

コマンドモードは初期モードです。Vimはこれを通常モードと呼びます。コマンドラインモードと混同しないでください。これは、:、/、?、または!を押した後に表示されるものです。


6
n行を削除して1行のスクリプトをスキップ
単にn行を削除し、1行をスキップして、ドキュメントの最後まで繰り返す基本的なVimスクリプトを作成したいと思います。特定の一致は気にせず、行を削除したいだけです。例えば; したがって3ddj、ドキュメント全体に対してコマンドを繰り返したいと思います。 Text I want to keep. Text I want to delete. Text I want to delete. Text I want to delete. Text I want to keep. Text I want to delete. Text I want to delete. Text I want to delete. Text I want to keep. Text I want …

2
単一の文字を挿入してから挿入モードを終了する方法はありますか?
テキストを調べているとき、たとえば特定の単語や引用符などの周りにバッククォートを追加しているとき、挿入するたびにEscキーまたはCtrl- [キーを押す必要があるのはイライラします。挿入(および追加)は異なるため、.あまり役に立ちません。 r単一の文字の後に通常モードに戻るようなものはありますか?ただし、置換モードの代わりに挿入モードを使用しますか?

1
「g」の意味は何ですか?
注:この質問にはStackOverflowに関する2種類の回答がありますが、おそらくここからより良い回答が得られると思いました。そうでない場合は、少なくとも、それがどこにあるべきかが文書化されます。 gで始まるvimコマンドは何ですか? vimノーマルモードでのgキーの使用 g通常モードのコマンドでの文字の意味的な意味は何ですか?私は外の一体を使用しているgg、Gと<n>G、今日まで、私はの意味は何かを見つけるために考えたことがなかったg大規模であるのVi禅。 今日、コード内の一連の定数を小文字にする必要があり、文字ごとよりも優れた方法が必要だと考えました(<n>~私が知らない奇妙な理由のために機能しないため)。g~特にで見つけましたg~iw。 これにより、リンクされた回答が見つかりましたが、それらは満足できる説明ではなく、起動するためにvi.SEではなくStackOverflowにあります。 そう、 viの意味論的意味はg何ですか? viセマンティックな意味で、私は人々が理解することを期待します。ciwつまり、単語のc変更はi、変更を意味し、は、内部のテキストアイテムをw意味し、スペースまたは句読点で区切られた単語を意味し_ます。 PS、これにタグを付けるにはどうすればよいですか?

1
バックスペースを使用して、現在のコマンドを通常モードで変更しますか?
ノーマルモードでコマンドを入力すると、タイプミス10dkが発生する場合があります19d。たとえば、タイプしようとすると、誤ってタイプし始める場合があります。 コマンドがまだ完了/コミットされていないので、19d<backspace><backspace>0dkエスケープを押してコマンドを再試行する代わりに、バックスペースを使用して誤ったキーを削除することは可能ですか? 副題:現在のコマンドがコミットされる前に保持するデータ構造のVim用語はありますか?

4
()内のテキストを以前にヤンクしたテキストに置き換える方法は?
Fnord前にテキストをヤンクしていて、カーソルが行のにあると仮定しますB。 M:mock(Baz) ()内のテキストを以前にヤンクしたテキストに変更するにはどうすればよいですか? 現在、私はしばしば次のようにして間違いを犯します: di( 別名「内部の削除()」 SHIFT + P 削除されたテキストはレジスタに移動されるため、正確なテキストが再び残ります。 欲しい: M:mock(Fnord)

1
コマンドのプレフィックスに不条理に大きな数が使用されるのを防ぐ(または少なくとも確認を促す)にはどうすればよいですか?
あなたが思うほど頻繁には起こりませんが、たまに起こり、私は猫を飼っていません。 基本的に、数字の行またはテンキーをマッシュしてから、繰り返し可能なコマンドをトリガーするキーコンボをたまたま叩いた場合、誤ってVimに数千回、数百万回、または数十億回もタスクを実行するように命令することができます。これは簡単に制御できなくなり、データが失われる可能性があります。 したがって、ソースコードにこのようなDoSを防止するための健全性チェックとして機能するように変更できる構成または何かがあるかどうか疑問に思います。

4
前の行の「=」までコンテンツを逆方向に削除するにはどうすればよいですか?
私はjavascriptコードの例を使用します: 1 var a = 1; 2 var b = |{}; カーソルが|(カーソルの形状がブロックの場合は文字「{」の上)の位置にaあります。オブジェクトを割り当てたいので、次のように変更します。 1 var a = {}; では、カーソルが「{」の上にあることを知りたいのですが、「{」の前のすべての内容を1行目の「=」記号の後の空白まですばやく削除するにはどうすればよいですか。 他の通常のエディターでは、バックスペースキーを押してコードを削除します。しかし、私はこれをvimで達成する方法はありません。

1
GNU画面でVimの通常モードと挿入モードのカーソルが変更されない
私はvimをいくつかの異なるコンテキストで使用しています。通常、私はこれを私の中に入れたい.vimrcです: let &t_ti.="\<Esc>[1 q" let &t_SI.="\<Esc>[5 q" let &t_EI.="\<Esc>[1 q" let &t_te.="\<Esc>[0 q" これにより、挿入モードと通常モードで異なるカーソルが使用されるようになります(通常モードはブロックカーソルであり、挿入モードは垂直線です)。これは、minttyでcygwin、xterm、およびrvxtを使用してうまく動作します。ただし、GNU画面を使用するたびに、カーソルが変化しなくなりました。これをtmuxで修正するための参照(たとえば、ここではvim + tmuxでのカーソルの形状)を見てきましたが、Screenで試したことは何もありません。今のところ、私はこれを私の中で使用してい.vimrcます: "Underline currently edited line if !has("gui_running") :autocmd InsertEnter * set cul :autocmd InsertLeave * set nocul endif これにより、挿入モードで現在の行に下線が引かれます(これ:has("gui_running")により、gvimで有効になりません)。またset laststatus=2、ステータスバーを下部に表示するためにも使用します。これも役立ちます。私はそれがgvimのようにもう少しうまくいくことを願っています。誰かがこれに対する修正を見つけましたか?

1
:g / ^ / normおよび:%normによるラインリファレンスの違いの理解
次の非常に単純なファイルがあるとしましょう a b c d e そして、各行の後に空行を追加することにしました。いくつかの異なる方法がすぐに思い浮かびます。私たちはそれをするだけかもしれません(したがって、失敗を受け入れます)。のようなマクロを記録し、qqo<ESC>jqそれを数回繰り返す場合があります。 当時、私には他の2つの方法がより明白に思えました。 まず、:normコマンドoを各行に発行すると思いました。だから私は走る:%norm o。しかし、実際に何が起こるかというと、5行の空白行があり、その後に上記の分離されていない行が続きます。私はこれを%norm、vimが実際にこの5行のファイルの最初の5行で次の通常のコマンドを発行してメッセージを取得することを意味すると解釈します。oコマンドは、新しい行を作成し、vimのは、それはいくつかの他の識別子によって、実際に行番号で参照していないという意味で「ダム」です。 さて、恥ずかしかったです。承知しました。上記の方法が機能するかどうかを確認するために、他にもいくつか試してみましたが、残念ながらできませんでした。好奇心から、私は他のお気に入りの大量適用方法を試しました。これは私を試してみました:g/^/norm o。驚いたことに、これはうまくいきます!だから私の目には、vimは上記と同じようにここでは「ダム」ではなく、単に行番号だけではなく行を参照しているようです。 正確には何が起こっているのですか?

2
通常モードでのみ行番号を設定する
挿入モードでは行番号をあまり使用しないので、オフにします。ただし、通常モードには最適です。 常に使用するのset nu!は面倒です。set nu!通常モードの終了と開始に関連付ける方法はありますか? 上記または他の方法を使用した解決策はありますか?

3
前の行の最後まで削除する方法は?
例(^カーソル位置です): 前: a bc def ghi j k l mn o p q rs ^ 後: a bc def ghimn o p q rs ^ または少なくとも: a bc def ghimn o p q rs ^ を使用できることはわかっていますがd0i<BS>、これを行うためのより高速な方法が必要で、コマンドモードを維持したいと思っています。私はvimの初心者であり、おそらく答えはの修正だと思いますkA。 どうもありがとうございました! :-)

4
Grok Vimのモーションと簡単な編集
Emacsを数年間使用した後、Vimに戻ります。チュートリアルを読んだり見たり、実際に毎日使ってVim を理解しようとしています。 テキストを編集するとき、Alt-F、Alt-B、Ctrl-a、Ctrl-e、Alt-D、Alt-BackspaceのEmacsコマンドは非常に便利で直感的であり、作業中にローカルですばやく簡単に編集できますテキスト(単語/コード)。 同様の機能を実装するVimの方法は何ですか?NORMALモードに戻って単一のモーションを発行し、モードを再入力するだけINSERTでは最適ではありません。 例1:式の先頭にINSERTaを挿入するモードの場合(、対応)するVim に挿入するには、式または行の最後に移動する方法を教えてください。 例2:テキストを編集するとき、文章やコードを書いたり編集したりしながら、単語を前後に削除したい場合がよくあります。完全に形成されたセンテンス/コードを頭に入れて、「ワンスオフ」を事前に入力する準備ができているのは珍しいでしょう。多くの場合、テキストを操作していると文が変わります。INSERTモードの制限により、Vimでこの種の編集を困難にしています。挿入モードでテキストを効果的に操作できずNORMAL、単純な移動や単語の削除のために常にモードに戻る必要があることに気づきました。 PS:Alt-Fと-Bはカーソルを1単語前または後ろに移動します。Ctrl-aおよび-eは、カーソルを行の先頭または末尾に移動します。Alt-Fはカーソルの下の単語を削除します。Alt-Backspaceはカーソルの前の単語を削除します。

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

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がバインドに適用する行拡張動作をどのようにオーバーライドできるかということです。数値接頭辞を引数またはそのようなものとして読み取ることができれば素晴らしいと思います。

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