Vim HardModeの細粒度の動き


11

最近、Vimのハードモードについて知り、それを試してみることにしました。しかし、細かい動きで問題が発生しています。

たとえば、本当に1行上または下に移動したいとします。以来jk無効になっている、私はこのためにそこにあるものをより良い選択肢はよく分かりません。

1つまたは2つのキャラクターを右または左に移動したいときに、同じ問題に遭遇しました。誰かがこれらのタイプの動きをどのように置き換えるか知っていますか?

これは私が使用しているプラ​​グインです:https : //github.com/wikitopian/hardmode


なんてバカなプラグインなんだ!機能するものなら何でも使用します。
romainl 2016

私は実際にromainlに同意します。ファイル内を効率的にナビゲートする方法を学ぶのは良いことですが、この種のプラグインを自分に課すことは必ずしも必要な痛みではありません。それでも、ここで私の答えに興味があるかもしれません(より正確には、/および?。の部分
statox

1
ここではスタトックスとロマインルに敬意を払いません。変更するターゲットに直接移動すると、全体的な効率が大幅に向上します。はい、これは最初はあなたを遅くするかもしれませんが、長期的には、より良いナビゲーションを使用して失われた時間を補います。
Archangel33

実際、@ Archangel33私hjklは、他の方法でより正確にナビゲートすることは良いことだという事実についても同じ意見を持っていると思います。私が不満に思っていたのはプラグイン自体でした:私の意見では、一度にナビゲートする新しい方法を学習することをお勧めします(同時にすべてを学習することはできません)。必要。それは私の意見だと言われているだけです:反対する権利があります:-)
スタトックス

1
@Alex確かに私のコメントは私の個人的な意見にすぎませんでした。私が唯一かつ普遍的な解決策を持っているとは決して考えないので、最後の文はでしたThat being said it is only my opinion: one has right to disagree。今、議論は無限に続く可能性があります。もちろん、一部の人々はこの種のプラグインのメリットを享受しますが、他の人々は不満を抱き、学習に害を及ぼすだけです。あなたがそれについて話したいのであれば、私はチャットであ​​なたと喜んで話し合いますが、この種の議論で質問のコメントをスパムにすべきではありません:-)
statox

回答:


17

これらはvimが実行できる動作のほんの一部にすぎません。これらは今のところあなたを動かしてくれるはずです。

TL; DR

  1. 利用Vimのヘルプ機能に建てられたのnavigationか、さらに良好usr_03.txt
  2. googleを検索 vim advanced movements
  3. 単語を使って移動する
  4. ここに行くすべての動き

動き

vim内を移動する方法はたくさんありますが、を検索して見つけた方法vim advanced movementsと、いつも使用している方法をいくつか挙げました。これらのほとんどを知っていると思いますが、特に注意を払う必要があると思うのは、ナビゲーションという単語です。

以下は、行内のナビゲーションを可能にするいくつかの例です。

  • 0 –現在の行の先頭に移動します。
  • ^ –行の最初の非ブランク文字に移動します。
  • $ –現在の行の最後に移動します。
  • g_ –行の最後の非ブランク文字に移動します。

言葉によるナビゲーションは非常に役立ちます。より詳細にするには、次のようにして、単語に関連して移動する必要があります。

  • e –現在の単語の最後に移動します。
  • E –現在の単語の最後に移動します。
  • b –前の(前の)単語に移動します。
  • B –前の(前の)WORDに移動します。
  • w –次の単語に移動します。
  • W –次の単語に移動します。

単語は、文字、数字、アンダースコアのシーケンスで構成されます。WORDは、空白で区切られた非空白文字のシーケンスで構成されます。words | VIMの設定によっては、WORDSも変わる場合があります。

WORDとWordの違いを示す例

192.168.1.1 単一の単語です。

192.168.1.1 七つの言葉です。

検索の動きも非常に役立ちます。

  • /pattern –次の出現に連れて行くパターンを検索します pattern
    • npatternカーソルの下の次の一致に移動します。
  • ?pattern–前のの発生に移動するパターンを検索しますpattern
    • Npatternカーソルの上にある次の一致に移動します。
  • * –カーソルの下にある現在の単語の次の出現箇所に移動します。
  • # –カーソルの下にある現在の単語の前の出現箇所に移動します。
  • % –対応する中括弧またはコード内の括弧に移動します。

vimを開く前でもできるいくつかのコマンドVim +N filenameを次に示します。コマンドラインから 、ファイルを開いた後、ファイルのN番目の行に移動できます。

vim +10 /etc/passwd

Vim +/pattern filenameファイルを最初の行で開き、pattern。次の例では、vimはREADMEファイルを開き、「install」という単語の最初の出現箇所にジャンプします。

vim +/install README

Vim +?patten filename最後に出現するファイルを開きますpattern。次の例では、READMEファイルを開き、最後に出現した「バグ」という単語にジャンプします。

vim +?bug README


8

hardmodeする代わりに、次のスニペットは、あなたが使用できるようになりますhjk、およびl通常としてではなく、彼らが矢継ぎ早に使用されているときに警告するビープ音を生成します。

function! s:BeepOnRepeat(key)
    let count1 = v:count1

    if !exists('s:last_time')
        let s:last_time    = reltime()
        let s:repeat_count = 1
    else
        " increment the repeat count if `h`, `j`, `k`, or `l` was pressed
        " within the last second, otherwise reset it
        let now = reltime()
        if str2float(reltimestr(reltime(s:last_time, now))) < 1
            let s:repeat_count += 1
        else
            let s:repeat_count = 1
        endif
        let s:last_time = now

        " produce an audible beep if a sequence of `h`, `j`, `k`, and/or `l`,
        " greater than three, was pressed (within the repeat count time limit)
        if s:repeat_count > 3
            let savebelloff    = &belloff
            let savevisualbell = &visualbell
            let &belloff    = ''
            let &visualbell = 0
            execute "normal! \<Esc>"
            let &belloff    = savebelloff
            let &visualbell = savevisualbell
        endif
    endif

    execute 'normal! ' . count1 . a:key
endfunction

nnoremap <silent> h :<C-u>call <SID>BeepOnRepeat('h')<CR>
nnoremap <silent> j :<C-u>call <SID>BeepOnRepeat('j')<CR>
nnoremap <silent> k :<C-u>call <SID>BeepOnRepeat('k')<CR>
nnoremap <silent> l :<C-u>call <SID>BeepOnRepeat('l')<CR>

hjkl使用を制限する別のアプローチについては、vim-molassesを参照してください。


3

別の方法として、「正しい動き」を学習しようとする中程度のモードを使用することもできますが、その場合はそれほど厳密ではありません。

中モードは、キャラクター単位の動きを制限するVimプラグインですが、完全に無効にするわけではありません。デフォルトでは、中モードでは、2つの連続した文字単位のモーションのみが許可されます。


1

私はこれと同じ問題を抱えていたので、:help hardmodeLoと入力しました

'g:HardMode_level' If set to 'wannabe' 
arrow keys disabled, but not   hjkl etc.                                                                                              

ちなみに、私はこのプラグインがマウスから遠ざかったので、このプラグインが非常に役立つvim初心者の1人です。

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