Vi & Vim

テキストエディタのviおよびVimファミリを使用している人のためのQ&A

1
カーソルが<Esc>の後の行の先頭に移動するのはなぜですか?
挿入モードで.txtファイルの行に沿って編集しているときに、キーシーケンスを使用した書き込みに続いてカーソルが行の先頭に移動することに気付きました。 &lt;esc&gt;:w この動作を変更して、カーソルが:writeの後の位置に留まるようにしたいと思います。これは可能ですか?カーソルを挿入モードのままにしておく必要はありません。書き込み後に最後の位置を維持したいだけです。 WindowsでgVim 7.4を使用しています。私の.vimrcは非常に基本的なものであり、私の動作のいずれかがこの動作を妨げるとは思わない。mswin.vimとexample.vimのソースを.vimrcから削除しました(公式のvim.org Windowsインストーラーにバンドルされています)。 以下のコメントを読んだ後、もう一度問題を確認しましたが、末尾の空白で完全に構成されている行を書き込んだ後、カーソルが左端にしかスライドしないことに気付きました。つまり、行がぶら下げインデントで、スペース以外の文字がない場合、カーソルはesc-:wで左端までスライドするだけです。.vimrcは、次の設定でインデント動作を処理しています。 set tabstop=4 set softtabstop=4 set shiftwidth=4 set expandtab set autoindent したがって、インデントされた行の下に作成された新しい行には、行の最初の4つのスペース(保持したい)として4つの末尾の空白が含まれます。「esc」キーを押すと、カーソルがバッファの左端にスライドします。 末尾の空白(インデントとして)で構成される行で、「esc」を押して通常モードに戻るときにカーソル位置を保持する方法はありますか?


2
関数を自動的に折りたたむにはどうすればよいですか?
関数宣言の構文に基づいてVimの折りたたみ関数を作成する方法はありますか? たとえば、vimに次のような関数を渡させます。 def foobar(foo,bar): if foo &gt; bar: print "foo" elif foo &lt; bar: print "bar" elif foo == bar: print "foobar" これに: +----- 7 lines: def foobar(foo,bar): ------------------------------------------------------------- これを実現するために.vimrcファイルに使用できるコマンドまたは関数のセットはありますか?
12 folding 

1
キーボード入力を記録して統計を行う方法は?
私がコーディング中に使用している最も一般的なパターンを知りたいのですが。だから私はvimにいる間、できればタイムスタンプを使って、すべてのキーボード入力を記録する方法を探しています。次に、最も最近使用されたパターン/モーションを分析して、アクションが実行される時間を特定し、最適化するものを見つけることができます。 Vimでこれを行う慣用的な方法はありますか?このためのプラグインを書いてみましょうか?このようなことを行うと、パフォーマンスにどのような影響がありますか? ありがとう
12 vimrc 

3
挿入モードに入らずに複数の文字を置き換える方法
次のような行があるファイルがあります。 foofoo.xy.barbar 私が変更したいxyとしますgh。私が実行しようとしました2r&gt; - ghが、それは置き換えとして、明らかにそれは、仕事をしませんでしたxyしgg、その後、左に私のカーソルの1スポットを移動しました。 挿入モードに入らず、または多くのキーストロークを使用せずにこれを行う方法はあり:s/xy/gh/ますか(例:)?

1
マクロの再生速度を改善しますか?
簡単なマクロを記録して次の行で再生しましたが、再生速度が非常に遅いようです(1秒あたり数行しか処理しません)。これは予想されたものであり、そのような速度を改善する方法はありますか?
12 macro 

3
WSL上のVim:システムクリップボードを同期しますか?(クリップボードを設定^ =名前なし)?
WSL / Bash for Windowsを使用y yy 3yしpているときに、vimで常に使用できるようにしたいのですが、vimの内部クリップボードではなく、すべてのアプリで共有されているシステムクリップボードに接続しています...すでにクリップボードを管理することに同意しています歴史。 Vimには、コピー/貼り付けバッファーをシステムクリップボードと同期する組み込みオプションがあるようです...しかし、WSLを実行するときの問題は、実際に使用/mnt/c/Windows/System32/clip.exeしてクリップボードにアクセスする必要があるということです...使用できるように: set clipboard^=unnamed WSLはまだサポートされていないようです。 私はneovimがこれをオプションとして持っていることを理解していますが、今は本当にneovimで実験したくありません... 今のところ、私が見つけた回避策に最も近いものは次のとおりです。 nnoremap &lt;silent&gt; &lt;leader&gt;y :call system('/mnt/c/Windows/System32/clip.exe', @0)&lt;CR&gt; vnoremap &lt;silent&gt; &lt;leader&gt;y :call system('/mnt/c/Windows/System32/clip.exe', @0)&lt;CR&gt; しかし、これは私の考えでは本当に恐ろしい解決策です... 2つのステップのプロセスをコピーすることになります... もちろん、マウス/シフト+インを使用してコピーと貼り付けを行うこともできますが、この同期をVimで正しく機能させる方法が必要だと思います。

1
Vimのグローバル置換が行のすべての一致を代用するわけではありません
時々、私のグローバルな置換が一列のすべてのマッチを代用しない場合があります。確認で置換を行うと、それが見えることが確認され、一致する可能性のある複数の行で一致が見つかりましたが、別の行に進みます。 ファイル全体を操作するgまたはgcパラメータをで使用しています%。 このファイルについて: hello hello hello hello hello hello hello もし私が%s/hello/goodbye/g得るなら goodbye hello goodbye goodbye hello hello goodbye 私が.vimrc検索/置換について持っているのは set hlsearch set ignorecase set incsearch
12 substitute 

2
VimでEscキーを再マッピングする
EscキーをVimの別のキーに再マッピングすることは可能ですか?全画面表示のVMware vSphere WebクライアントコンソールウィンドウでVimを使用していて、Escキーを押して編集モードを終了すると、コンソールウィンドウの全画面モードが終了します。 RHEL YUMリポジトリのVimを使用しています。(RHEL 7.5、Vim 7.4)。


2
Vimにファイルで新しいバッファを開かせる組み込みの方法?
Vimにファイル付きの新しいバッファーを開かせる組み込みの方法はありますか? ファイルを開きます。:enew引数を取らず、空のバッファを開きます。 :edit既存のバッファを閉じます。 関連(について:enew): スプリットで開かずに新しいバッファを開くにはどうすればよいですか? 現在のウィンドウで新しいバッファーをどのように開きますか?
12 buffers 

11
オンラインで2番目の出現を置換
ファイルのリストがあります: ./a.temp.txt ./a.temp.txt ./a/b.temp.txt ./a/b.temp.txt ./a/b/c.temp.txt ./a/b/c.temp.txt そしてtemp.、各行のを削除したいのですが、2番目の出現だけなので、ファイルは次のようになります。 ./a.temp.txt ./a.txt ./a/b.temp.txt ./a/b.txt ./a/b/c.temp.txt ./a/b/c.txt どうすればよいですか?

2
ネストされたマクロを記録するにはどうすればよいですか?
次のように、マクロ内にマクロを記録したい: qa [ first macro ... ] qb [ second macro ... ] q [ some more stuff, involving @b ... ] q ただし、2番目qは最初のマクロを停止する要求として解釈され、残りはコマンドとして解釈されます。 マクロ内で2番目のマクロの記録を開始する方法はありますか? そうでない場合、すでにマクロ内にある間に特定のキーストロークのシーケンスを繰り返すという望ましい効果を達成する他の方法はありますか?
11 macro 

3
Vim正規表現の「\ zs」と「\ @ <=」アトムの違いは何ですか?
これは私がドキュメントから得たものです。\zs前の正規表現\@&lt;=に一致した後に「強調表示された部分を開始」し、前のアトムに一致した後に「強調表示された部分を開始」します。しかし、私はこれの微妙さを正確に理解していないので、誰がそれらが少し深く異なっているかを誰かが説明できますか? これが私を不思議に思った理由です。 /\_s\zsnnoremap つまり、nnoremap先頭にスペースまたは行頭(つまり、前の行からの改行、つまり\_前のs)を選択し、実行gnしてビジュアルモードに入り、何らかの理由で最初の列のみ(つまり、最初の列(つまり最初の内は)選択されている-全体という事実にもかかわらず、言葉がされて強調して点灯します。nnnoremapnnoremap:hlsearch ただし、代わりに検索を実行すると /\_s\@&lt;=nnoremap を試してみてください。gn全体nnoremapが適切に選択されています。ここで何が起こっているのでしょうか?私は(あえて言う)いくつかのあいまいなバグを発見しましたか?

1
他の場合endifワンライナー
私の中にこのワンライナーがありますvimrcが、うまくいきません: if has("patch-7.4.710") | set listchars+=space:· else | set listchars+=trail:· | endif VIMさんのコメント: E518: Unknown option: else 手伝って頂けますか ?
11 vimscript 

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