カーソルを現在の行の中心に移動するにはどうすればよいですか?


17

現在の行の中央にカーソルを移動する方法はありますか?(テキストの行の中央-画面幅の中央ではありません)

M画面の中央にカーソルを移動するのと同様のショートカットがあるかどうか疑問に思っていました。

編集:括弧内に説明を追加


2
それで、フルラインの真ん中または画面幅の真ん中ですか?
ムル

@muruフルラインの途中を考えていた
-thameera

2
それを質問に追加してもらえますか?そして、ラッピングで何が起こると期待していますか?
ムル

回答:


16

私はこれを行うための組み込みの方法を知りませんが、あなたは簡単にそれを行うためのマップを持つことができます:

nnoremap µ :exe 'normal! '.(virtcol('$')/2).'\|'<cr>

@Ingo Karkatは、VISUALモードでも機能する次のバリアントを提案しました。

noremap <expr> gM (virtcol('$') / 2) . '<Bar>'

残念ながら、SELECTモードでもトリガーされます。結果として、私はカップルを好む:

nnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'
xnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'

3
この変異体はまた、ビジュアルモードで正常に動作します:noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
インゴKarkat

15

ビルトインgmはまさにこれを行います。


7
これにより、行の長さではなく、コンソールの幅に関して行の中央に移動することに注意してください。したがって、10文字の行と80文字幅のコンソールがある場合、カーソルは5行目ではなく、行の10文字目になります(40行目に到達しようとするため)。
アプノートン

3
うん。質問から、行の中央を探しているのか、画面の中央を探しているのかは明確ではありません。の類推に基づいて、Mスクリーンを想定しました。
-tommcdo

1
実際、私はこれを80文字のテキストを持つワイド(約180文字)画面で試しました。カーソルは行末まで行きました。非常に便利なコマンドではないようです。
ベン

@Benそれは行末に行きましたか、それとも画面幅の中央に近づきましたか?画面の幅の50%以上の幅で試すか、で試し:set virtualedit=allます。
8ビットツリー

はい。ただし、OPは画面の中央ではなく、行テキストの中央にジャンプするコマンドを要求していました。したがって、質問には答えません。
ベン

3

Lucの答えに加えて、Easymotionプラグインもあります。これにより、特定の位置にすばやく移動できます。押す<Leader><Leader>wと、特定の単語に移動するために押すことができるキーが強調表示されます。そうすれば、現在の行の途中にある単語に簡単に移動できます。


1

テキストの中央に移動したい場合(行頭の空白を考慮しないで)、これは機能します:

function! s:Gm()
  execute 'normal! ^'
  let first_col = virtcol('.')
  execute 'normal! g_'
  let last_col  = virtcol('.')
  execute 'normal! ' . (first_col + last_col) / 2 . '|'
endfunction
nnoremap <silent> gm :call <SID>Gm()<CR>

ただし、これはビジュアルモードでは機能しないと思います。


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