vim:相対番号で番号を切り替えます


15

setl nu!

relativenumberと同様に、番号を切り替えることができます(オン/オフ)

setl rnu!

{off、number、relativenumber}を切り替える方法は?


5
ああ なぜこの質問はSUに移行したのですか?これは、プログラミングツールに関連するプログラミングの質問です。それ以上のことはありません。5人がvimを知らないため、SO(私のような)に焦点を合わせているプログラマーは、この答えを見つけることができません。図を移動します。メタ
sehe

@sehe、私は同意する、これはstackoverflowの質問です
-juanpablo

回答:


9
if &nu == 1
   set rnu
elseif &rnu == 1
   set nornu
else
   set nu
endif

おかげでブノワ、私はあなたのソリューションを要旨
-juanpablo

1
@JuanPablo:うーん。私のバージョンの方が好きです:)
sehe

1
@sehe:私のバージョンについても同じことを言います。:-)

17

私は論理パズルが大好きで、vimコマンドが簡潔な繰り返しのために1行に収まるときに本当に大好きだからです(@:個人的なお気に入りです):

:exec &nu==&rnu? "se nu!" : "se rnu!"

これにより、同じサイクルが維持されます。私はそれが主let &nu=1に暗黙的にnorelativenumberを設定するためだと思う-おそらくドキュメントにある理由で:)


3
nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>F3を使用して3つのオプションを切り替えるための1行として.vimrcファイルに配置できるため、+ 1 。

3
あなたはそれを行うことができますnnoremap <silent> <F3>...視覚的な注意散漫を減らし、他のマッピングを妨害します。
sehe

質問を読んだときに、ほぼ同じ(ただし短い:-)行を思いつきましたexe'se'&nu+&rnu?'rnu!':'nu'

ところで、オプションnumberrelativenumberオプションの間の接続を確認するには、を参照してください:helpg When setting this option

@ib:共有してくれてありがとう。私はあなたのvimコードゴルフが大好きです-私の毎日の仕事を本当にスピードアップする宝石がそこにあります。ただし、この場合、読みやすいので、バージョン(具体的には3文字長い-whtiespace痙攣以外)を選択しました。私の見解では、それをさらに凝縮しても利益はありません。メモリから入力する必要があったとしても、入力するのが難しくなり、覚えるのがずっと難しくなります。これはマッピングになります。ブノワのバージョンは、罰金があるので、それは単一行にうまくフィットしなかった以外
sehe

8

Vim 7.3.1115以降、これはやや複雑になりました。

その理由は、「行番号なし」と「絶対行番号」に加えて、相対行番号の設定が2つあるためです。通常の「相対行番号」と「カーソル行に絶対番号がある相対行番号」です。

もっと技術的に言えば、4つのすべての組み合わせ'number'とは'relativenumber'可能になりました。

切り替える方法は次のとおりです。

  • 4つの設定すべてを切り替えます。数字なし絶対相対カーソル行の絶対を使用した相対

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • 数字なし絶対相対の切り替え:

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • 数字なし絶対カーソル行に絶対がある相対を切り替えます

    :let [&nu, &rnu] = [!&rnu, &nu+&rnu==1]
    

7

より読みやすいソリューションをご希望の場合、以下が私の.vimrcにあるものです

" Relative or absolute number lines
function! NumberToggle()
    if(&nu == 1)
        set nu!
        set rnu
    else
        set nornu
        set nu
    endif
endfunction

nnoremap <C-n> :call NumberToggle()<CR>

これの素晴らしい点は、ctrl+ nを押して相対番号モードと絶対番号モードを切り替えることができることです!


0

上記のEric Andersonのような別の選択肢:

"Relative with start point or with line number or absolute number lines
function! NumberToggle()
    if(&number == 1)
        set number!
        set relativenumber!
      elseif(&relativenumber==1)
        set relativenumber
        set number
      else
        set norelativenumber
        set number                                                  
    endif
endfunction

nnoremap <C-n> :call NumberToggle()<CR>

0
" put this in your .vimrc or source it from your .vimrc


  function! ToggleRelativeNumber()

      if &relativenumber

           set norelativenumber

      else

           set relativenumber

      endif

  endfunction

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