Vi & Vim

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

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。 どうもありがとうございました! :-)

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

1
コメントの行を自動的に分割しますか?
Vimには、set tw=7979文字で行を自動的に分割する優れたコマンドがありますが、私は(ちょうど)私のコメントが72文字で自動的に分割されるのが好きです。 Vimでこれを行う良い方法はありますか?

2
行をまたがって隠す方法はありますか?
これが私のユースケースです: 私はたくさんのコードを持っていますが、スタイルの強制により、それぞれの開き括弧と閉じ括弧の前後に改行を書きます。 例: function func(args) { statement 1; statement 2; if (condition) { statement 3; } } これは素晴らしくて読みやすいですが、これはスペースの無駄な無駄だと思いますが、私のチームメイトは私に同意しません。基本的に、これはコードをチェックインする方法であり、それがそれです。 Vimの機能を使用して画面の不動産を節約しながら、詳細な方法でコードを書くことができるのではないかと考えていました。私はそれをタイプアウトすることを気にしません、ただスペースをより効率的に使用したいだけです。たぶん、Vimに不要な空行を自動で折りたたむことができると考えました。 構文規則を使用してこれを設定するのは少し難しいことに気づきます。何を書いても既存の構文規則と競合するように思えるためですが、最初の試みとして、衝突しないこれらの規則を書くことを決めました。 syntax match aaaaaaaaa "\vabcd" conceal cchar=A syntax match bbbbbbbbb "\vef\ngh" conceal cchar=B ここでの2番目のルールは、私が望むものに近いもので、開き角括弧の場合は次のようなものです/\v\{(\n\s*){2,}:開き角括弧に改行の2以上の任意の数を指定し、その後に空白のみを付けます。 ただし、vimの内部では次のことが起こります。 abcd行を入力すると、A期待どおりに非表示になります。 ef1つの行とgh次の行に入力すると、両方の行がで非表示になりBます。 ef\nghこの方法で垂直バッファスペースを節約できるように、2行が1行に隠されることを本当に望んでいました。 しかし、私は今、それがおそらくVimの実装の詳細な問題であることを理解しています。行の折りたたみは、コードの折りたたみが解決する問題であり、おそらく隠蔽に関する限り、範囲外です。 だから、やりたいことをやる方法がまだあるのかな。多分どういうわけか折りマーカーを使用していますか?問題は、空の空白だけを折りたたむ必要があることです。

2
単語の終わりの後に移動するか、cusorの後に削除する
カーソル位置の後の行の終わりまで削除する最も速いシーケンスは何ですか? 例: この行をもっと早く削除したい シーケンス:5eD単語の最後の文字を削除しますline この林を削除したい vimで移動すると、単語の最初または最後の文字に移動することが多く、行末まで削除するたびに1つ以上のキーストロークで移動する必要があります(上記の例では、右に1つのモーションを追加します)。5elD)。より効率的な方法はありますか(単語の終わりの後に移動するか、カーソルの後に削除することによって)?

2
確認プロンプトなしで* .hおよび* .cppファイルの保存時に「ctags -R」を実行するにはどうすればよいですか?
これはnoobの質問なので、基本的にはvimでctags -Rソースファイルまたはヘッダーファイル(*.hまたは*.cpp)に書き込んでいるときに実行したいので、次のことを試しました。 autocmd BufWritePost *.cpp :!ctags -R autocmd BufWritePost *.h :!ctags -R 動作するようですが、保存するたびに確認が必要なので、次のようにEnterキーを押す必要があります。 "coap/coap_pdu_ll.h" 30L, 793C written :!ctags R Press ENTER or type command to continue 確認を取り除く方法はありますか?

2
マークダウン:太字と斜体を通常のテキストとは異なる色で構文強調表示する方法は?
マークされたテキスト__bold__または_italic_通常のテキストと同じ色で表示されるテキスト。 見出しとコードは異なる色で表示されるため、vimはファイルをマークダウンとして正しく認識します。 これは、私が使用するカラースキームに関係ありません。 Markdownで太字または斜体としてマークされたテキストを独自の色で強調表示することはできますか? PS私はXubuntu Linuxでフルvimインストール(vim-tinyではない)バージョン7.4を使用しています。 こんな感じです。前の行は見出しなどが機能することを示していますが、22〜26行目には、デフォルトとは異なる方法で強調表示されているはずのテキストが含まれてい:colorscheme defaultます。

1
TeX入力の「段落」の意味を変更しますか?
私はこのようなセクションがたくさんあるLaTeXコードを書いています \begin{definition} blah blah blah ... ... \end{definition} 通常のテキストでは、gq]すべてをうまくリラップするのがとても好きです。上記のようなブロックセクション内では、endコマンドもラップされています。 vimが行の開始\endで段落を終了することを伝える方法はありますか?または、使用できる別の書式設定コマンドがあります(に<F8>マップしましたがgq]、再定義してもかまいませんか?

2
vimで単語をチャンクに分割しないようにするにはどうすればよいですか?
英語のユーザーはおそらくこの問題を抱えていませんが、正規表現に関してはvimはかなり馬鹿げています。私の場合、ENアルファベット以外のトルコ語のアルファベットのほとんどの文字は、単語文字としては適格ではないようです。 トルコ語の単語を含むドキュメントがあるとします。 gerçekleşiyor 検索式 /ger\wek …単語の始まりとは一致しません。何らかの理由で、çは単語文字ではありません。 プラグイン\wが正規表現のレパートリーの一部として使用する場合、これは厄介なことになります。適例はneocompcache(neocompleteNeovimと互換性があるために代わりに使用する)です。一部の言語構文で余分なマッチングルールセットを除外すると、オートコンプリートはワードサイズのチャンクでのみ発生します。私が大量のトルコ語の散文を書いているとき、実際には機能的なオートコンプリートを持っていると便利ですが、ほとんどの単語はトルコ語の文字が省略された状態で小さなチャンクに分割されるため、役に立たないほどです。 より広い範囲の文字を「単語」文字として受け入れるようにvim(できればneovimが望ましい)をどのように説得できますか?

2
マイナス文字を含むCSSクラス名をオートコンプリートする方法は?
私は次のCSSクラス構造を持っています .mAIcon .mAIcon-reject .mAIcon-edit .mAIcon-accept .event 等々。 HTMLファイル内で、これらのクラス名をオートコンプリートしたい。 しかし、タイプすると <span class="mAIcon mA|"> 残りをオートコンプリートしたいのですが、 <span class="mAIcon mAIcon|"> 私が本当に欲しいものを取得するには、追加を入力する必要が-ありeます。たとえば、オートコンプリートをもう一度使用します。しかし、私はで始まるすべてのものを取得しe、クラスも取得しますevent。これは本当に煩わしく、この場合オートコンプリートはかなり役に立たなくなります。 i_CTRL-NコマンドでVimの一般的なキーワード補完を使用し、追加の補完プラグインをインストールしていません。 -オートコンプリートのCSSクラス名の検出にを含めることは可能ですか?

3
executeとnormalを使用したマッピングで以下を使用すると、引用符の欠落エラーが発生するのはなぜですか?
コマンドは nnoremap <leader>; :execute "normal! mqA;\<esc>`q" 次にを押すと<leader>;、がE114: Missing quote: "normal! mqA;\続きますE15: Invalid expression: "normal! mqA;\。どうしてこれなの?コマンドラインに直接入力すると、コマンドは正常に機能します。 このコマンドは;、カーソル位置を変更せずに、現在の行の終わりにa を追加します。 私は私がnnoremap <leader>; mqA;<esc>`qどれが機能するかをただ実行できることを理解しています、問題は上記が機能しない理由、そしてそれを実行正規形で機能させるために何ができるかです。 私の推測では、ネストされたエスケープのある程度のレベルが必要ですが、うまくいくものを見つけることができませんでした。

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はカーソルの前の単語を削除します。

3
SQLiteまたはMySQLデータベースと対話するにはどうすればよいですか?
これはVimではなくIDEに適しているかもしれませんが、ローカルまたはリモートのMySQL / SQLiteデータベースに接続できる方法があったら幸いです。これを行う方法はありますか? 分割ウィンドウまたは独自のタブに配置できると思います。行の読み取り、更新、削除、SQLのインポート/エクスポートを行います。外部キーのようないくつかの高度な機能は、明らかに、省略できます。
8 ide 

1
makeのオートコンプリート
私は、カスタム設定した場合はmakeプログラムを、私が入力したときにアクティブになるだろうタブ補完オプションのリストを提供するためにどのような方法がある:make+ Space+はTab? カスタムコマンドを使用すると、fiを実行できます。 command! -nargs=* -complete=customlist,MakeComplete -bar MakeGitbook call MakeGitbook(<q-args>) 組み込みコマンド、特に:make?または、組み込みのものを呼び出すだけでなく、タブ補完を追加するカスタムコマンドラッパーを定義する必要がありますか?

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 …

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