vimで行の中央に移動


14

私は0が行の最初に行き、$が最後に行くことを知っていますが、途中に何かありますか?

回答:


11
:call cursor(0, len(getline('.'))/2)

4
これは、マップされている場合はかなり役に立ちます。例::nnoremap gm:call cursor(0、len(getline( '。'))/ 2)<cr>
Heptite

3
virtcol( '$')/ 2で十分です。
Luc Hermitte、2010年

@Luc Hermitte:いいですが、ハードタブが関係しているときの動作は必ずしも最適ではありません。
ephemient

そのため、colではなくvirtcolを使用します。:)。しかし、実際に使用する必要があります| cursor()ではありません。ところで、len()はこれ以上良い結果を与えません。さらに、lenはマルチバイト文字で他の問題を引き起こします。
Luc Hermitte、2010年

8

タイピングgmはそれを行いますが、画面の行ごとに移動します(を参照:help gm)。テキスト行で機能させるには、次のコマンドを再マッピングできます。

map gm :call cursor(0, virtcol('$')/2)<CR>

gmはカーソルを画面の中央に移動するようですが、テキスト行が画面の長さよりも短い場合、中央に移動できません。明確化していないため申し訳ありません。
teggy 2010年

@teggy:なるほど。テキスト行の中央に移動するようにgmを再マップするようにソリューションを変更しました。ご覧のとおり、エフェミエントとリュックエルミットのソリューションを組み合わせています。
JooMing、2010年

ephemientが指摘したように、cursor()がハードターブをそれぞれ1文字としてカウントするため、ハードターブに関する問題がまだあります。さらに、マルチバイト文字でも機能しません。
Luc Hermitte、2010年


1

これが私が見つけた最良の解決策です。行の真ん中にジャンプすることはあまり実用的ではありません。ほとんどの場合、中央に移動した後もカーソルをいくつかの位置に移動する必要があります。特定のキャラクターにジャンプできるとしたら?多くの人は単にキャラクターを検索し、次に到達するまで「次へ」を押します。これは遅いです。Easy-motionプラグインは、より優れたソリューションを提供します。

私のお気に入りは<leader><leader>s、ジャンプしたいキャラクターです。Easy Motionは、すべての一致を別の文字に置き換えて、ユーザーが選択できるようにします。チュートリアルを参照してください。その人生を変えるプラグイン...

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