2017-02-01 5 views
0

下の番号にジャンプし、Vimの方法は、カーソルのvimで

map gn "[email protected] 

「GN」またはいくつかの他のキーのコンボよりもカーソル下の行番号にジャンプするよりエレガントな方法は何ですか?これは、カーソルが数字列の先頭にあることを保証することを必要とする。また、このマクロは、レジスタ "n"にあるものによっては少し危険です。

これがなぜ機能するのかわからない:@nは、レジスタn(数字)にあるものを "G"に連結しないで実行することを意味します。

call cursor(expand("<cword>"),1) 

のようなもので

機能は、いずれかの動作していないようです。

思考?

答えて

5

私はこれをお勧めします:

nnoremap gn yiw:exec (@" =~ '^\d\+$' ? 'norm @"G' : '')<cr> 

それはたとえば、あなたが言及している多くの問題が修正されています。

  • これは、カーソルを確保する必要がの先頭にあります単語(ここでの「単語」は数字の文字列を意味する)。

    ywの代わりにyiwを使用すると、この問題が修正されます。 text objectsを読んでください!

  • また、このマクロはレジスタnの内容によっては少し危険です。

    これは、カーソルが数字を超える場合にのみ、任意のコードを実行します。それ以外の場合は何もしません。

他のいくつかの利点があります:nnoremapの代わりmapを使用して

  • がベストプラクティスです。それはあなたの頭の中で多くの頭痛を軽減します! (more info

  • あなたの@nレジスタを駄目にしません。

ない、この作品でも、なぜ完全に確認してください:@nは、レジスタn(番号)で何を実行することを意味し、「G」とそれを連結していません。

入力@nは、入力したとおりに、先読みバッファにレジスタn内のテキストを挿入します。したがって、コマンドが未完成の場合は、コマンドが完了するのを待って(入力したように)そこに座ります。

3d 

のようなマクロを実行することもできます。これらのマクロは、動作を待ってから3つの動作を削除します。

+1

専門的に、説明されています。 (少なくとも私にとっては)重要な区別は、コマンドがどのように解釈されるかです@nは "実行するn"ではなく、行が完了するまで "コマンドライン"(より良い用語がないため)に保持される修飾子ですモーションと一緒に。これは現在完全にはっきりしています。 – wmmso