Vi & Vim

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

2
`wrap`オプションが設定されている場合のスクロールの問題
wrapオプションがアクティブになるたびに(マークダウンファイルを操作しているときはいつでも)この問題に対処しています。 何が起きるかは、jおよびkでバッファを上下にスクロールしているときに、最上部と最下部の折り返されたテキスト行(視覚的に段落を形成)が画面からスムーズに(つまり、1つずつ)スクロールしないことです。代わりに、段落全体が消えて突然見えなくなり、見た目が見えなくなり、方向感覚が失われて迷惑な効果が生じます。 GIFは何が起こるかをよりよく説明すると思います。ここでは、k上方向にスクロールするために繰り返し押すだけです。一番下の段落に注目してください! 私はそれが修正可能であるとは思わなかったので、私はこの動作に慣れましたが、それから、それは物理的なラインでは発生せず、wrap設定されていません。 物理的な行ではなく視覚的な行で画面からスクロールアウトするようにVimに指示する方法はありますか? PS:はい、私は私がマッピングされてきたjとkするgjとgk。

1
テンキーがviおよびPuttyで機能しない
vimSSH経由でファイルを編集しているとき、キーボードのテンキーを使用して長い数字(IPアドレスなど)を入力しようとします。 Vimあまり好きじゃないようです。Windows用のPuTTYを使用して、Debianを実行しているコンピューターにSSHで接続しています。 123挿入モードであるかどうかに関係なく、を押すとこれが表示されます。 s r q 「通常の」(数字パッドではない)数字キーを使用すると、すべてが正常に動作します。ここで何が起こっているのですか?
10 terminal  putty 

6
ファイルの最後にまだ行がない場合にのみ、行を追加する方法は?
行を追加してインプレースでファイルを編集したいのですが、まだ存在しない場合に限り、スクリプトを完全なものにします。 通常、私は次のようなことをします: cat >> ~/.bashrc <<EOF export PATH=~/.composer/vendor/bin:\$PATH EOF ansible(line+ insertafter=EOF+ regexp)を介してそれを行うことも可能ですが、それは別の話です。 vi / exでは、次のようなことができます。 ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc しかし、理想的には同じ行を繰り返さずに、行が既に存在する(したがって何もしない)かどうかを確認するにはどうすればよいですか? それともExエディタでそれを行う簡単な方法がありますか?

1
関数が完了するまで画面が更新されないようにする
私は現在のvimバッファーにテキストを大量に移動して出力する機能を持っています。それを実行すると、目がくらむほどの速度で起こっていることをすべて見ると少し戸惑います。 関数が完了するまで画面をフリーズするにはどうすればよいですか? 問題の関数は次のとおりです。 function! MakeChoices() :let save_view = winsaveview() let start = line('.') "Locate previous *choice. (b=backwards, W=nowrap, n=doNot move cursor) let choiceStartLine = search('^*choice', 'bW') if !choiceStartLine echo "No *choice found. (*choice must not be indented. This is to avoid finding *choice blocks nested in another *choice block.)" return …
10 vimscript 

3
先頭の空白を決して含まない「」に似た動きはありますか?
私はa"vimでかなり頻繁にモーションを使用しています。たとえばca"、コードの一部をリファクタリングするときに使用して、ハードコードされた引数を変数名に置き換えます。このアプローチの問題a" は、末尾に空白がない場合、先頭の空白が含まれることです。 末尾の空白は含まれますが、空白がない場合は先頭の空白が含まれます。 したがって、次のように関数呼び出しを編集すると、 aFunction(arg1, "toBeReplaced", arg3) #original aFunction(arg1, replacedArg, arg3) #refactored 私は再挿入スペースの前に手動に持っているreplacedArgとしてca"、それが削除されます。 この空白を含まない同様のモーションはありますか、それとも代わりに使用できる何か他のca"スペースを入力する手間を省くことができますか? ノート: cf"文字列にエスケープされた引用符が含まれていない限り、私がやりたいことを行いますが、文字列の先頭にカーソルを置く必要があります。文字列内のどこからでも使えるものを使いたいのですが、入力するのが少し?"<Enter>cf"面倒です。 それは、単一の<Space>キーストロークではなく、最初にスペースを含めることを忘れがちで、少なくとも4回の追加のキーストローク(bi<Space><Esc>)がかかり、フォーカスを失うという事実についての詳細です。したがって、置換コマンドの長さは、指定された文字の間のテキストのみを削除してから挿入モードに入る限り、それほど重要ではありません。

3
vimを終了せずに、ファイルの一部の単語を数えるにはどうすればよいですか?
テキストでいっぱいのファイルがあります(MarkdownまたはLaTeXなど)。このファイルの一部の単語数を数えたいのですが。 :! wc -w %現在のバッファーでwc -wを実行する方法を知っています。そして、関心のあるセクションを名前付きレジスターにヤンクできることを知っています。名前付きレジスタをコマンドまたはパイプで使用するためにオペレーティングシステムに送信する方法はあると思いますが、それを見つけることができませんでした。または、レジスター内の単語を数えるより良い方法はありますか? 私のユースケースは、vimでプログラミング以外の書き込み(メモ、論文など)をたくさん行っていることです。編集中にファイルの特定のセクションに追加した単語数をカウントしたいと思います。セッション。

4
コマンドラインで編集用に現在のファイル名を表示します
コマンドラインで現在のファイルへのパスを表示して、同様のファイル名を入力するにはどうすればよいですか?現在のファイル名に置き換えられる省略形は必要ありません。ファイル名を編集し、ディレクトリパスを入力します。たとえば:edit、類似した名前のファイル、または類似したディレクトリにあるファイル vim src/submodule/frontend/frobnicate2.c 次に、を編集し../trunk/src/submodule/frontend/frobnicate.c、を挿入../trunkおよび削除するだけで2、フルパスを再入力する必要はありません。 もちろん、シェルに戻ってそのコマンド履歴を使用することもできます。または、GUIを介してパスをコピーして貼り付けることもできますが、Vimを終了する必要がないより効率的な方法を探しています。

1
NERDTreeファイルを開いてエクスプローラバッファを自動的に閉じる方法
NERDTreeプラグインを使用する場合のデフォルトの動作は、新しいファイルを開いてNERDTreeバッファを開いたままにすることです。私がしたいのは、このデフォルトの動作を維持することですが、必要なときにオーバーライドして、ファイルを開いた後にNERDTreeバッファが閉じられるようにすることです。 let NERDTreeQuitOnOpen=1新しいファイルを開いたときにNERDTreeバッファーを自動的に閉じるために使用できることはわかっていますが、このオプションはデフォルトの動作を完全に上書きします(これは私が望むものではありません)。 理想的には、NERDTreeに私がやりたいことを実行するための組み込み機能があるかどうかを知りたいです。(私は探していましたが、そのようなものは見つからなかったので、実際には存在しないと思います) それが存在しない場合、2つのアイデアがありました。 1つ目は、に設定する関数を作成し、ファイルを開いてNERDTreeQuitOnOpenから1、再びNERDTreeQuitOnOpenに設定すること0です。 2つ目は、次のマッピングを作成map d<CR> <CR> :NERDTree <CR> :bd<CR>することです。ファイルを開き(最初<CR>)、NERDTreeバッファーに戻り(:NERDTree <CR>)、このバッファーを閉じます(:bd <CR>)。私はそれを改善してマッピングがNERDTreeバッファーにのみ存在するようにする必要がありますが、それはかなり醜い解決策だと感じています。 どのアイデアが最良で、その理由は?それとももっと良い選択肢がありますか?


2
状況依存の挿入モードのマッピングまたは省略形
LaTeXプラグインにいくつかのユーティリティマッピングを実装して、数学のタイピングを簡略化する予定です。たとえば、次のような略語を作成します `a : \alpha `b : \beta -> : \to => : \Rightarrow そして同様。(一部の)マッピングを数学環境の内部でのみ使用でき、外部では使用できないようにしたい。 構文グループ、つまりtexMathZoneEやを通じて数学環境を認識できることを知っていますtexMathZoneX。ただし、状況依存のマッピングまたは略語を作成するためにこれを使用する方法はわかりません。


1
バッファの内容をvimscriptとして実行
私が持っているnofilevimscriptが含まれているバッファを、私はそれを実行したいです。ただし、:so % バッファではなく保存されたファイルが必要なため、機能しません。デフォルトでこれを行うvimコマンドはありますか?そうでない場合、同じことをする関数を作成することは可能ですか?

4
異なる行の異なる長さのテキストを選択するにはどうすればよいですか?
次のテキストがあると仮定します。 aaa-dd-e:「aaa」、 bb-x:「bb」、 c-9:「c」 以下のような選択をしたい: aaa-dd-e:「aaa」、 bb-x:「bb」、 c-9:「c」 cvを使用してビジュアルブロックを作成しようとしましたが、最初の列に選択を作成し、「f:」を押した後(上記のように、選択をすべての行のコロンマークに展開するつもりでした)、得られるものは次のとおりです。 aaa-dd-e:「aaa」、 bb-x:「bb」、 c-9:「c」 選択は最初のコロンで停止し、長方形を作成します。

1
rcファイルにカスタムの「設定」コマンドを作成して、モードラインから呼び出すことはできますか?
私が最近質問したところ、:set vimモードラインではパラメーター以外のものを渡すことはできないことがわかりました。セキュリティの問題は理解していますが、これを回避する方法がないのではないかと思います。SOに関する最近の質問符号化規格に準拠するためのパラメータの大きなバッチの設定については、考えて、考え、モードラインからオンまたはオフにすることができ、私のrcファイルで物事の「グループ」を定義することが可能であることが私を得ましたか? 疑似コードはありませんが、設定されたパラメーターからトリガーされる関数を作成する方法はありますか? set_function! codestyle() if &1 == 'psr-2' set ts=4 set sw=4 endfi if &1 == 'drupal7' set ts=2 set sw=2 iab D8 Drupal 8 endif endset_function これは、次のようなモードラインによってトリガーされます。 # vim: codestyle=psr-2 これは、いくつかの点でファイルタイプマッチングに似ていますが、手動オーバーライドを許可します。また、他の事前定義された方法で環境をセットアップし、vimでファイルが他の任意のコマンドを実行するというセキュリティの問題を回避しながら、よりカスタマイズされた環境を可能にします。これを行う方法はありますか?

5
ワイルドカード表現に一致する複数のファイルを開く方法は?
グロブ表現に一致するいくつかのファイルを編集したい。たとえば、子ディレクトリ内のすべてのgit構成ファイルを編集するには、シェルでこれを実行できます。 vim */.git/config Vimの:コマンドラインでは、:find */.git/config同様のことを行う(つまり、グロブ式に一致するすべてのファイルを開く)ことを期待していましたが、代わりに不平を言いE77: Too many file namesます。 ワイルドカード/グロブ式に一致する複数のファイルを開くためのVimコマンドまたはワンライナー(関数の記述は含まれません)はありますか?

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