Vi & Vim

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

3
Ctrl-AとCtrl-Xに似ていますが、最初の桁のみを変更します
整数ではなく、カーソルの後/下の最初の桁を増減する方法はありますか? vimがどのように機能するかはわかりませんが、それを行うプラグインはありますか?見つかりませんでした。 CSSを編集する場合など、他の場合にも非常に役立ちます。 与えられた: ▐margin: 10px 私が押すCTRL-Aと、私は見たいです: ▐margin: 20px 実際: ▐margin: 11px

2
ctrlpでファイル名の一致を改善するにはどうすればよいですか?
私のプロジェクトには次のファイルがあります: $ find . -type f -and -name 'peop*' ./app/assets/stylesheets/admin/sections/people.css.sass ./app/controllers/admin/people_controller.rb タイピング:e app/assets/stylesheets/admin/sections/people.css.sassに飽きてきたので、ctrlpはタイピングを保存する良い方法かもしれないと思いました。しかし、私はそれを私が正気であると考えるもののファイルと一致させることができません。 まず、を使用して<C-p>と入力するとpeop、これらの結果が得られます(「最初の」一致が一番下にあります)。 > app/models/attribute_group.rb > app/models/contract_template.rb > app/policies/contract_policy.rb > app/uploaders/photo_uploader.rb > app/policies/invoice_policy.rb > app/views/layouts/pdf.pdf.haml > app/uploaders/logo_uploader.rb > app/models/property_object.rb > app/policies/person_policy.rb > app/policies/photo_policy.rb >>> peop_ これらの結果は恐ろしいものです。に含まれるどちらのファイルもありませんpeop。私がそれをpeople次のように拡張した場合でも、 > app/policies/contract_template_policy.rb > app/models/concerns/exportable.rb > app/models/contract_template.rb > app/uploaders/photo_uploader.rb > app/uploaders/logo_uploader.rb > app/views/admin/people/_show.html.haml > …


2
各行のpythonステートメントを実行する方法は?
Pythonステートメントを使用して現在の行を変更する次のサンプルコードがあります。 :py import vim; vim.current.line="["+vim.current.line+"]" 現在のファイルの各行に対してこのステートメントを実行するにはどうすればよいですか? 関連:VimでPythonをどのように使用できますか?スタックオーバーフロー時

1
エラーをスローせずにVimがファイルを書き込めないようにするにはどうすればよいですか?
私はこの答えのコードを改善して、不足しているディレクトリを作成する前に確認を求めようとしています。これは私が書いたものです: function! CreateDirectoryAskConfirmation(path) if !isdirectory(a:path) echohl Question echo "Create directory " . a:path . "?" echohl None let response = nr2char(getchar()) if response ==? "y" call mkdir(a:path, "p") endif endif endfunction autocmd BufWritePre * call CreateDirectoryAskConfirmation(expand("<afile>:p:h")) 1つ欠けているのyは、プロンプトを押さない場合は、Vimに書き込みを中止させて、エラーが発生しないようにE212: Can't open file for writingするためです。エラーメッセージを非表示にするために別のキーを押す必要はありません。これを達成する方法はありますか?
10 save  autocmd  error 

1
WORDsの<Cw>はありますか?
挿入モードでCtrl- wを押すと、前の単語が削除されます。それは同等ですCtrl- BackspaceWindowsの場合、およびOpt- DeleteOS Xで、かつ実際にタイピングをスピードアップします。 Vimには、との別個の概念がwordありますWORD(を参照:help word)。これは、テキストナビゲーションのための非常に貴重である:それは違いであるwとW、bそしてB、というように。 Ctrl-でw動作しwordます。同様の指示はありWORDますか?

2
ヘッダーファイルから関数プロトタイプから関数を自動的に作成する
はじめに CおよびC ++でプログラミングする場合、通常、関数プロトタイプと実際の関数を.h/ .hppおよび.c/ .cppファイルに分割します。悲しいことに、関数のプロトタイプを1つのファイルから別のファイルに転送するのは非常に退屈であり、両方のファイル(または適切なメモリ)を同時に開く必要があるだけでなく、特に引数やメンバー名の変更が多い場合は、多くの不要な入力が必要になります。製。 例 foo.hpp: int someFunction(int someArgument); class someClass { public: someClass(); ~someClass(); int anotherFunction(int anotherArgument); }; foo.cpp: #include "foo.hpp" int someFunction(int someArgument) { // Code goes here } someClass::someClass() { // Code goes here } someClass::~someClass() { // Code goes here } int someClass::anotherFunction(int anotherArgument) { …

1
JavaScriptチェーン呼び出しを誤ってインデントする
たとえば、次のようなJavaScriptコードがあるとします。 var widget = library() .chainCall1() .chainCall2() .chainCall3(); =コマンドを使用して自動インデントすると、次のように表示されます。 var widget = library() .chainCall1() .chainCall2() .chainCall3(); それは私が望むものではありません。元のようにチェーン呼び出しをインデントしたい。どうすれば修正できますか?

1
複数のバッファ、同じファイル、異なる設定
異なる設定のファイルを同時に編集することはできますか?より正確には、Vimの同じインスタンス内に同じ内容(1つのバッファーを変更すると他のバッファーの内容にすぐに影響する)であるが、カーソル位置、マーク、構文の強調表示などが異なる複数のバッファーが欲しいです。 一般的な使用例には、同じファイルの異なる部分を個別に編集する(1つのインスタンスでビジュアルモードを開始せずに、他のインスタンスで現在のビジュアルモードの選択を解除するなど)、設定を切り替えることなく混合形式のファイル(HTMLやJavascriptなど)を編集することが含まれます。 。(2番目の使用例の代替アプローチは、カーソル位置に基づいて設定を自動的に変更することですが、これはこの質問の範囲外です。) 言及が衝撃を与える可能性があることを認めた編集者は、これを「間接バッファ」と呼んでいます。
10 buffers 

3
トラックパッドを使用して水平スクロールするにはどうすればよいですか?
トラックパッドのスクロールがVim、慣性などすべてで機能することに気づきました。これを水平に動作するように変更したいので、右矢印キーを長時間押す代わりに、上下にスクロールしてカーソルを左右に移動できます。 スクロールを左/右の動きにどのようにマッピングできますか?
10 scrolling  mouse 




3
テキストを1つのレジスタから任意の数のレジスタに移動するにはどうすればよいですか?
レジスタから別のレジスタまたはレジスタセットにテキストを「パイプ」する方法はありますか?例えば、移動"qレジスタに"1スルー"5。 同じマクロのわずかに異なるバージョンを作成したいことがよくあるので、「テンプレート」マクロを複数のレジスタにコピーして、それぞれを適切に変更できると便利です。 実用的な例を示すために、ここで私にこの質問を促した問題があります。 次の行をハードウェア記述言語から多くの繰り返しブロックに変換する必要があります。 RAM64(in=in, load=load0, address=address[0..5], out=out1); に RAM64(in=in, load=load1, address=address[0..5], out=out2); RAM64(in=in, load=load2, address=address[0..5], out=out3); RAM64(in=in, load=load3, address=address[0..5], out=out4); RAM64(in=in, load=load4, address=address[0..5], out=out5); yypW^At)^Aregisterに保存したインクリメント関数を使用して、これを実行するマクロがあります"a。 時々、次のようにインクリメントのパターンが少し異なる必要があります RAM512(in=in, load=load1, address=address[0..8], out=out2); RAM512(in=in, load=load2, address=address[0..8], out=out4); RAM512(in=in, load=load3, address=address[0..8], out=out6); RAM512(in=in, load=load4, address=address[0..8], out=out8); ここで、レジスター内のマクロはに"bなりますyypW^At)^A^A。 レジスターでこれを行いたいのですが、1から5までの増分ごとに行います。レジスタ"aは(どういうわけか)レジスタbからeにコピーできます。次に、各レジスターをバッファーに貼り付け、必要な変更を加え(項を追加し、tモーションに従うキャラクターを変更し)、変更した式をヤンクしてレジスターに戻します。理想的には、この最後のステップをレジスタにコピーするコマンドに含めることもできます これにより、変更する必要のないマクロ内のすべての文字を繰り返す必要がなくなります。私の例では、それは些細なことかもしれませんが、私が求めていることを実行することが非常に役立つかもしれないときを予測することができます。

4
操作をコードのセクションに制限する
日常業務の中で、特定の関数(変数の強調表示や検索など)を操作する必要があることがよくありますが、編集/検索の範囲を制限することはできませんでした。 vimで、$colorこれらの中括弧のセットへのすべての参照、またはこの折り目などを選択的に言う方法があります。可能であれば、これは比較的一般的で、テキストの編集/置換に適用できるのが理想的です。 例として: $color = "#fff"; function PickColor () { $color = "#bbb"; $newColors = ["#000", "#fbf", $color]; foreach ($newColors as $c) { if ($c == "#fff") { break; } } } $differentColor = $color; このコードは比較的悪い例ですが、$ colorのすべてのインスタンスを置き換える必要がある場合、PickColor関数のコンテキストでこれをどのように行うのでしょうか。別の例として、使用する#と、*あなたはそのテキストオブジェクトの次のインスタンスに移動することができ、どのように(基本的には、検索をラップする)だけで、この機能の検索のための範囲を制限する行の数千人に及ぶ可能性がファイル全体に反対して負けあなたの場所、またはあなたが持ってはならない別の機能の何かを誤って置き換えますか?

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