かっこ/括弧などの開始と終了の両方を押すときにvimを使用する


8

私がプログラムすることを学んだとき、私は開始ブラケットと終了ブラケットの両方などを押してから、左矢印キーを押してテキストを入力します。だから、中に入れて[hello]入力し、私[]それが第1のブラケットの上にあるように、左の矢印を、そして([)。

私はいつも正しい数のブラケットなどを持っていることを知っているので、それが好きです。

しかし、Vimの考え方に固執するために、私は継続的に矢印キーに手を伸ばしたくありません。矢印キーを使用したり、挿入モードを継続的に切り替えて押し続けるだけhで実行できることはありますか?

回答:


5

自動ペアプラグインを探している可能性があります。

あなたは次のように文字を入力すると{(または[このプラグインは自動的に対称型の文字を追加し、2つのブラケットの間に挿入モードでカーソルを交換します。それらの文字を削除している間も「スマート」にすることができます。

また、矢印キーを忘れてしまったら、アドバイスをします。何をしたいにせよ、ホームローから手を動かさずに、より高速なモーションにアクセスできます。慣れるまでに少し時間がかかるかもしれませんが、一度慣れると見逃すことはありません。


コメントありがとうございます。よろしければお願いします。「[」、「hello」、「]」の順に入力しますか。サラウンドプラグインがないと(これは素晴らしいアイデアのように思えますが、感謝します)、正しい数のブラケットを失う可能性があるという問題がなくても、前後に移動するのは面倒なようです
JZL003

まあ、実際に私はいつも、オートペアまたはsurround.vimのいずれかを使用します(ピーターの答えを参照)が、私は、プラグインなしで、私はどうであろうとしなければならなかった場合には[] <Esc>(上にカーソルを置くであろう] )、そして最後にiその意志挿入モードでは、カーソルを大括弧の間に置きます。
スタトックス

挿入モードのときに@statoxを使用して、カーソルを2つ左に移動するにはどうすればよいですか。とはctrl-o 2h?これは、カーソルに手を動かすよりも速いですか?;)
Vitor

@Vitorいや、私は私が、おそらくいくつかの時間を打つだろう未満3つの文字の移動のために、通常モードに行くためにEscキーを打つだろうhかとj、そうでなければ、私は他の動きを使用します。それは私には速く感じますが、一部の人々は別の方法でそれを感じると思います:)
スタトックス

@statoxは、vimを使用して10年が経過しましたが、まだhjklを使用するのに苦労しています。コメントしてくれてありがとう!:)
Vitor

8

これを自動的に行う「ペア」プラグインはたくさんあります。しかし、それらすべてが間違った方法で私をこすります。私はTim PopeのSurround.vimプラグインを使用する傾向があります。私は次のことを行います:<c-s>]挿入モード[]で、角括弧の中央にカーソルを置いて挿入します。


これについてもっと多くの人が知る必要があるので、vimサラウンドは単にラッピングするよりも便利です。また、私はペアプラグインの
不快

4

スペースを1つだけ移動する必要がある場合はctrl-o、挿入モードで次の入力を通常のコマンドにするのでctrl-ohは1つ後ろに移動します。モードラインは--- (insert) ---、通常のコマンドを入力するまで表示されます。


2

lh-bracketsは、ブラケットのペアを挿入するための挿入、通常、ビジュアルモードのマッピングを提供します。

ノート:

  • 新しいブラケットペアの追加は非常に簡単です。
  • 挿入モードのマッピングはコンテキスト依存です-つまり、文字列またはコメントコンテキスト内で展開されません...
  • 周囲のプラグインとは異なり、周囲のマッピングは直感的ですが、vimスタイルではありません。つまり(、ビジュアルモードでのヒットは(デフォルトで)囲まれ、ヒットsi(または同様のシーケンスである必要はありません。

2

以前の答えはとても良いです。しかし、私はあなたが何かもっと簡単にしたいと思うかもしれません。個人的に私h j k lは移動に使用します。したがって、私は私の.vimrcに以下を追加しました:

inoremap <c-j> <esc>ji
inoremap <c-k> <esc>ki
inoremap <c-h> <esc>i
inoremap <c-l> <esc>2li

ほんの小さなヒント。あなたは、あなたの手順があることを述べi[]<Esc>hi

オペレーター保留マッピングがあります。ci[つまりdi[、またはまたはを使用できますii[


1

私は個人的に、オートマジックによる文字挿入の大ファンではありません。マッピングのセットを簡単に定義して、テキストを挿入したり、必要な場所にカーソルを追加したりできます。

" Add brackets with closing bracket
inoremap <C-a>[ []<Left>
inoremap <C-a>( ()<Left>

" For C & C-like languages
inoremap <C-a>{ {<Cr><Cr>}<Up>

" For Ruby
inoremap <C-a>def def<Cr>end<Up>

ultisnipsのようなプラグインもこのようなことを行いますが、より高度であることに注意してください。たとえば、JavaScriptでは次のように入力できます。

if<Tab>hello

そして私は得る:

if (hello) {

}

ブラケットを完成させるための簡単なスニペットを追加できます。これは、次の場所にある特別な.snippetファイルです~/.vim/UltiSnips/all.snippets

snippet (
(${0})
endsnippet

snippet [
[${0}]
endsnippet

snippet {
{
${0}
}
endsnippet

${0} カーソル位置です。

詳細については:help UltiSnips-adding-snippets、を参照してください。

ultisnipsにはPythonが必要です。別の有名なプラグインはvim-snipmateです。Vim Wikiには、スニペットプラグインの完全なリストがあります

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