挿入モード Vimでは、矢印キーを使用する以外に、文字を前後に移動してテキストを走査する方法はありますか?
を押すと h、 j、 k そして l 挿入モードでは、実際の文字はテキストを移動する代わりに画面に印刷されます。
私が今やっている方法は、 Ctrl + [ (Esc)そして、テキストを横断します;しかし、明らかにそれは生産的ではありません。
あなたはvimを誤用しているように見えますが、それはおそらくvimにあまり詳しくないからでしょう。
正しい方法はを押すことです Esc、小さな修正をしたい場所に移動して修正し、戻って編集を続けます。 Vimには通常のキャラクターの前進/後退/アップ/ダウンよりもはるかに多くの動きがあるため、効果的です。それらをもっと学んだ後、これはたまたま生産的になります。
いくつかの使用例は次のとおりです。
ただし、still挿入モードを終了せずに小さなテキストトラバーサルを実行する場合は、 rson の アドバイス および使用 Ctrl+O。上記の最初の例を取り上げると、 Ctrl+OFf 前の「f」文字に移動し、挿入モードのままにします。
モードの挿入で、使用 CtrlO 1つのコマンドだけで通常モードに移動するには:
CTRL-O h move cursor left
CTRL-O l move cursor right
CTRL-O j move cursor down
CTRL-O k move cursor up
これはおそらくあなたがやりたいことをする最も簡単な方法であり、覚えやすいです。
挿入モードでのその他の非常に便利なコントロールキー:
CTRL-W delete Word to the left of cursor
CTRL-O D delete everything to the right of cursor
CTRL-U delete everything to the left of cursor
CTRL-H backspace/delete
CTRL-J insert newline (easier than reaching for the return key)
CTRL-T indent current line
CTRL-D un-indent current line
これにより、多くの無駄な通常モードへの切り替えがなくなります。
Pavel Shvedの内容にかかわらず said -慣れるのがおそらくより望ましい Escaping挿入モード-挿入モード内のクイックナビゲーション用のマッピングセットの例を次に示します。
" provide hjkl movements in Insert mode via the <Alt> modifier key
inoremap <A-h> <C-o>h
inoremap <A-j> <C-o>j
inoremap <A-k> <C-o>k
inoremap <A-l> <C-o>l
これは Alt+h 挿入モードでは、1文字左に移動します。 Alt+j ダウンなど、同様に hjkl 通常モード。
そのコードをvimrcファイルにコピーして、vimを起動するたびにロードする必要があります(通常モードで:new $myvimrc
と入力して開くことができます)。
以来 Alt 修飾子キーはデフォルトでは(重要なものに)マッピングされません。同じ方法で、他の(またはすべての)機能を通常モードから挿入モードにプルできます。例えば。:
現在のワードの先頭への移動 Alt+b:
inoremap <A-b> <C-o>b
inoremap <A-w> <C-o>w
より良い用途があるかもしれないことに言及する価値があります Alt 通常モードの動作を複製するよりも重要な例:以下は、隣接する行から現在の列の一部を行の最後までコピーするためのマッピングです。
" Insert the rest of the line below the cursor.
" Mnemonic: Elevate characters from below line
inoremap <A-e>
\<Esc>
\jl
\y$
\hk
\p
\a
" Insert the rest of the line above the cursor.
" Mnemonic: Y depicts a funnel, through which the above line's characters pour onto the current line.
inoremap <A-y>
\<Esc>
\kl
\y$
\hj
\p
\a
(明確にするために\
行継続 とインデントを使用しました-コマンドは1行で記述されているように解釈されます。)
CTRL-H delete the character in front of the cursor (same as <Backspace>)
CTRL-W delete the Word in front of the cursor
CTRL-U delete all characters in front of the cursor (influenced by the 'backspace' option)
(挿入モードで移動するための注目すべき組み込みのホットキーはありません。)
リファレンス: :help insert-index
このマッピングのセットは、 Alt+hjkl movementsコマンドラインで利用可能:
" provide hjkl movements in Command-line mode via the <Alt> modifier key
cnoremap <A-h> <Left>
cnoremap <A-j> <Down>
cnoremap <A-k> <Up>
cnoremap <A-l> <Right>
あるいは、これらのマッピングは、移動bothを挿入モードとコマンドラインモードに一度に追加します。
" provide hjkl movements in Insert mode and Command-line mode via the <Alt> modifier key
noremap! <A-h> <Left>
noremap! <A-j> <Down>
noremap! <A-k> <Up>
noremap! <A-l> <Right>
pullingの通常モードコマンドのコマンドラインモードへのマッピングコマンドモードの Ctrl+O):
" Normal mode command(s) go… --v <-- here
cnoremap <expr> <A-h> &cedit. 'h' .'<C-c>'
cnoremap <expr> <A-j> &cedit. 'j' .'<C-c>'
cnoremap <expr> <A-k> &cedit. 'k' .'<C-c>'
cnoremap <expr> <A-l> &cedit. 'l' .'<C-c>'
cnoremap <expr> <A-b> &cedit. 'b' .'<C-c>'
cnoremap <expr> <A-w> &cedit. 'w' .'<C-c>'
CTRL-B cursor to beginning of command-line
CTRL-E cursor to end of command-line
CTRL-F opens the command-line window (unless a different key is specified in 'cedit')
CTRL-H delete the character in front of the cursor (same as <Backspace>)
CTRL-W delete the Word in front of the cursor
CTRL-U delete all characters in front of the cursor
CTRL-P recall previous command-line from history (that matches pattern in front of the cursor)
CTRL-N recall next command-line from history (that matches pattern in front of the cursor)
<Up> recall previous command-line from history (that matches pattern in front of the cursor)
<Down> recall next command-line from history (that matches pattern in front of the cursor)
<S-Up> recall previous command-line from history
<S-Down> recall next command-line from history
<PageUp> recall previous command-line from history
<PageDown> recall next command-line from history
<S-Left> cursor one Word left
<C-Left> cursor one Word left
<S-Right> cursor one Word right
<C-Right> cursor one Word right
<LeftMouse> cursor at mouse click
リファレンス: :help ex-edit-index
Vimの純粋主義者なら、この答えを読み飛ばしてください。 OTOH、vimが初めてで、何百ものvimチュートリアルやブログで見つけられない役立つヒントを探している場合は、続きを読んでください:-)
それは2014年です。最近vim
に戻った人として、いくつかの、潜在的に逆説的な視点とヒントを提供できます。
繰り返しはvimの強力な概念ですが、(個人的に)繰り返しを使用すると、カウント(行、文字、単語など)を強制したり推測したりすることが奇妙に感じます。私の脳は通常、「カーソルが欲しいthere」のように機能し、「カーソルが欲しい_5_words_to_the_left_」ではありません。カーソルをすばやく移動し、このように挿入ポイントの場所を視覚的に観察することで、編集する必要がある場所に到達するために必要なホップ数をカウントする代わりに、編集しているものに心を留めることができます。
...大量のテキストをナビゲートします。
ほとんどの(すべての)現代のコンピューターには、キーボード(MacBookなど)と密接に統合されたtouchpadがあります。工業デザイナーはこれらの設計を最適化するのに何年も費やしてきたので、キーボードから手を離さなければならないという古い問題はもはや本当の問題ではありません。さて、マウスに慣れており、切り替えたくない場合ですが、vimを初めて使用する人(検索でこの投稿を見つける可能性のある人など)にとっては、これはそれほど大きな問題ではありません。
マウスを有効にすると、クリックとドラッグは視覚モードに切り替わり、ヤンクする領域をマークする効果があります。
マウス(ホイール)を使用してスクロールし、クリックしてカーソル(duh)を配置するだけで機能します。詳しくは http://usevim.com/2012/05/16/mouse/ をご覧ください。
これらは、vimでナビゲートするためのより現代的な(マウス、スクロールホイールなどを使用した)方法であり、入力の好みに応じて等しく効果的です。
HTH
Vimコミュニティの多くの人々は、挿入モードではナビゲートすべきではなく、Vimの方法ではないと主張しています。これは、標準のエディターからVimに移行するときに学んだ誤った感情だと思います。
Vimは、ツールを使用してアトミックで反復可能なアクションまたは検索を作成する場合に最も強力です。
ミスを修正する場合は、挿入モードでナビゲートしてもかまいません同じ挿入セッションで変更したテキストの範囲外にナビゲートするべきではありません。
テキストの入力中にミスを犯し、それを修正するために挿入モードを抜けると、意図したアクションを繰り返すことができなくなります。.
は修正を繰り返します。
Vimは多くの挿入モードナビゲーションキーをサポートします。矢印キー、ホーム、および終了がありますが、他にも多くのショートカットがあります。 :h ins-special-keys
を参照してください。
挿入モードでナビゲーションを少し改善するために、いくつかのキーをマップしてみませんか?
imap <C-b> <Left>
imap <C-f> <Right>
imap <C-e> <End>
imap <C-a> <Home>
" <C-a> is used to repeat last entered text. Override it, if its not needed
ターミナルでMetaキーが機能するように回避できる場合は、emacsモードをさらにモックできます。 normal-modeのナビゲーションははるかに優れていますが、動きが短い場合は挿入モードのままにしておくと役立ちます。
より長いジャンプのために、私は次のデフォルトの翻訳を好む:
<Meta-b> maps to <Esc><C-left>
これはnormal-modeに移行し、Wordに戻ります
GVimでは、マウスを使用できます。しかし、正直なところ、矢印キーの使用の何が問題になっていますか?キーボード上にあるのには理由があります。
私は信じている Home そして End (そして PageUp/PageDn)挿入モードでも正常に機能しますが、それ以外に、テキストトラバーサル用に定義された他の標準キーはないと思います。
挿入モードで機能するマッピングを作成できます。その方法は、inoremapを使用することです。コマンドの先頭にある「i」に注意してください(キーマップの衝突を避けるにはnoremapが便利です)。当然の結果は、「通常」モードでは「n」です。 vimが「正常」だと考えるものを推測できます;)
ただし、実際には「通常」モードを使用してテキスト内をナビゲートする必要があります。 Vimはこの種のものには非常に優れており、そのすべての電力は通常モードから利用できます。 Vimはすでに、通常モードから挿入モード(i、I、a、A、o、Oなど)に移行する簡単な方法を提供しています。トリックは、通常モードに入るのを簡単にすることです。これを行う方法は、エスケープをより便利なキーに再マップすることです。ただし、通常のタイピングと競合しないものが必要です。私が使う:
inoremap jj <Esc>
Jj(2個のjが次々とすばやく入力される)は私の語彙に現れないようです。他のものは快適な場所にリマップします。
私が行うもう1つの重要な変更は、キーボードのCAPSLOCKキーとCONTROLキーを切り替えることです(ホストコンピューターのキーボード構成を使用します)。 (これはEmacsユーザーによくあることです。マイナス面は、「固定されていない」キーボードを見つけたときです!Aaarggh!)
CAPSLOCKを再マッピングすると、次の挿入モードの再マッピングを快適に使用できます。
いくつかのキーは既に挿入モードでマップされていることに注意してください(backwards-kill-WordはデフォルトでCw(Control-w)で、あなたはすでにあなたが望むバインディングを持っているかもしれません。 :
inoremap <C-h> <C-w>
しかし、通常モードでは同じ筋肉記憶痙攣が必要になるため、C-hも次のようにマッピングします。
nnoremap <C-h> db
(d)elete(b)ackwardsは同じキーコードで同じことを達成します。この種のクイック編集は、実際にタイプミスの際に役立つものです。ただし、テキスト内を移動する場合や、前のWordを削除する以外の場合は、通常モードを使用してください。 (もちろんリマップを使用して)モードを変更する習慣を身につけたら、挿入モードを再マッピングするよりもはるかに効率的です。
頻繁に使用されるいくつかの動きとアクションについて、次のマッピングを定義しました。これにより、CTRL + Oの組み合わせと比較してキーストロークが節約され、頻繁に必要になるため、長期的に見れば見返りが得られます。
inoremap <A-$> <C-o>$
inoremap <A-^> <C-o>^
inoremap <A-h> <Left>
inoremap <A-l> <Right>
inoremap <A-O> <C-O>O
inoremap <A-o> <C-o>o
申し訳ありませんが、vimはそのようには動作しません。
「通常」モードに切り替えて、ナビゲートしてから再び挿入する必要があります。
imap
を使用して、挿入モードの任意のキーをカーソルキーの1つにマップできます。そのようです:
imap h <Left>
これで、hは通常モードのように機能し、カーソルが移動します。 (このようにhをマッピングすることは明らかに悪い選択です)
VIMを使用してテキスト内を移動する標準的な方法は「非生産的」だとは思いません。通常モードでテキストを走査する非常に強力な方法がたくさんあります(wとb、または/と?、またはfとFなどを使用するなど)