6

私は、CSS ファイルやその他の数字をいじる必要のあるファイルを扱うことがよくあります。w単語を(参照したり、文を参照したりするのと同じように、整数を参照するキーを持つ機能が欲しいです。たとえば、css ファイルでは、高さの宣言の先頭に移動し、最後に「px」と再入力することなくその値を変更できますw

そのようなことはありますが、ドキュメントにはありませんか、またはこの機能を .vimrc に追加する方法はありますか?

行の先頭にいるような使用方法がありci"、「内部変更」コマンドを使用してジャンプして次の整数を変更できる場合のボーナスポイント。

簡単な算数ができればさらにボーナスポイント。「Add too, internal, integer, 5」の略である簡潔なコマンドを発行して、現在の行の次の整数を、開始時よりも 5 つ大きくしたいと考えています。

編集:

皆さん、本当に素晴らしい提案、私の仕事を確実に改善してくれる素晴らしいアイデアをいくつか。ありがとう!Hassek の答えはおそらく私のワークフローで終わる可能性が最も高いですが、他の誰も私の最初の質問に (完全に) 答えていないようです: A motion that works on integers. romainl によって追跡された提案はその目標を持っているように見えますが、確実に機能させることはできません

私自身(そしておそらく他の人たち)のために、私は以下の私の欲求を明確にします:

単語に対して機能するのと同じように機能するキーですwが、整数に対して機能するため、精神的な vim ボキャブラリーに単純に追加してシームレスに使用できます。これには、次のシナリオが含まれます。(d例のキーとして使用します):

  1. 通常モードd: 次の整数にジャンプ
  2. 通常モードcd: カーソルの下の整数の末尾に変更します (cw次の単語に変更する必要がある特殊なケースであることに注意してください。cw実際には のように動作しceます。) この特殊なケースは整数でも実装されることを期待しています。
  3. ビジュアル モードid: [count] 個の整数を選択します。
  4. ビジュアル モードad: [count] 個の整数を選択します。先頭または末尾の空白が含まれます。

w新しいモーションに期待される動作を見逃していませんか? 通常モードとビジュアル モードの両方で使用できるキーはありますか?

4

3 に答える 3

8

次のコマンドを使用して、整数を加算または減算できます。

<num>Ctrl-a (to add)
<num>Ctrl-x (to substract)

そして、行の次の番号に移動してコマンドを実行します

于 2012-07-03T22:37:04.117 に答える
4

この提案を参照してください。よさそうです。

編集

確かに、それはかなりいいです。これにより、私の習慣は/<number><Esc>あまり効率的ではないと考えたので、これらのマッピングを~/.vimrc. それらが長期的に役立つかどうか見てみましょう。

nnoremap è  /\v\d+<CR>
nnoremap é  ?\v\d+<CR>

一見èciè132<Esc>すると、キーを押すという点ではわずかに優れているように見えますが/2<Esc>{count}s132<Esc>、スキップできる場合は大幅に優れています。変更したい値の最初の桁を確認し、b. 置換する文字を数えます。

時が教えてくれる。

再編集

関数とそのマッピングは次のとおりです。

onoremap N  :<c-u>call <SID>NumberTextObject(0)<cr>
xnoremap N  :<c-u>call <SID>NumberTextObject(0)<cr>
onoremap aN :<c-u>call <SID>NumberTextObject(1)<cr>
xnoremap aN :<c-u>call <SID>NumberTextObject(1)<cr>
onoremap iN :<c-u>call <SID>NumberTextObject(1)<cr>
xnoremap iN :<c-u>call <SID>NumberTextObject(1)<cr>

function! s:NumberTextObject(whole)
    normal! v

    while getline('.')[col('.')] =~# '\v[0-9]'
        normal! l
    endwhile

    if a:whole
        normal! o

        while col('.') > 1 && getline('.')[col('.') - 2] =~# '\v[0-9]'
            normal! h
        endwhile
    endif
endfunction

これで、次のことができます。

  • vcdyカーソル位置から で終わるまでの数値の一部<command>N<command>eなんとなくやに似て<command>wいる。

    Here are some random numbers: 24 7635 1000018
                                            ^--->
    

    カーソルがまだ数字の上になく、元に戻らない場合は機能しません。

  • vcdyの整数<command>iN

    Here are some random numbers: 24 7635 1000018
                                          <-^--->
    

    繰り返しますが、カーソルがまだ数字の上にない場合は機能しません。

確かに、すべてを改善することができますが、それが始まりです!

終了編集

私もCSSをよく使っています。

数値を変更するには、次の 2 つの方法を使用します。

  • {count}<C-a>そして{count}<C-x>、Hassekの答えのように、数値をどれだけ増減したいかを知っているとき。20pxに変えたいとしましょう。カーソルを数字に移動する必要なく25px、簡単にトリックを実行できます。5<C-a>これは非常にクールです

  • /<number><CR>{count}s<new number>新しい値が現在の値と大きく異なり、デルタを計算するのが面倒な場合。/2<CR>2s67<Esc>に変更でき23pxます67px/2<CR>R67<Esc>別の方法ですが、新しい値が現在の値と同じ長さである場合にのみ有効です。f<number>同じ回線にいる場合に使用します。

<C-r>=137-42<CR>私が頻繁に使用する式の結果も挿入できることに注意してください。

于 2012-07-04T06:31:55.380 に答える
3

ここのインターネットの奥で何かを見つけて、このように変更しました

nnoremap ,n /\v\d+/b<cr>mah/\v\d+/e<cr>mb`av`b
vnoremap ,n <esc>/\v\d+/b<cr>mah/\v\d+/e<cr>mb`av`b
  • \v\d+数字のグループを検索します
  • /b+mahそのbエジニングに移動し、マークを設定し、1 文字戻るので、もう一度行うことができます
  • \v\d+同じグループの数字を検索する
  • /e+mbは最後まで行き、別のマークを設定し、最後に
  • `av`b最初のマークから 2 番目のマークまでを視覚的に選択します
于 2012-07-04T00:50:40.347 に答える