Układ kolumn Vim 80 dotyczy

Wydaje mi się, że sposób w jaki robię 80-kolumnowe wskazanie w Vim jest niepoprawny: set columns=80. Czasami również set textwidth, ale lubię widzieć i przewidywać przepełnienie linii za pomocą alternatywy set columns.

Ma to pewne niefortunne skutki uboczne - nie mogę set number z obawy przed rozdzieleniem plików, które mają różne kolejność numerów linii; tzn. = 100 plików linii będą wymagały dwóch różnych wartości set columns ze względu na dodatkową kolumnę używaną do wyświetlania dodatkowych cyfr. Ja też uruchamianie nowych sesji (g)Vim zamiast dzielenia okien pionowo, co zmusza mnie do używania schowka menedżera okien -- vsplits zmusza mnie do wykonywania set columns za każdym razem, gdy otwieram lub zamykam Panel, więc rozpoczęcie nowej sesji jest mniej kłopotliwe.

Jak poradzić sobie ze wskazaniem 80 znaków, gdy chcesz set numbers, podzielić pionowo itp.?

Author: Jon Seigel, 2008-10-25

14 answers

Mam to ustawione w moim .vimrc:

highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.\+/

To podświetla tło subtelną czerwienią dla tekstu, który przekracza limit 80 kolumn(subtelne w trybie GUI, w każdym razie-w trybie terminala jest mniej).

 549
Author: Simon Howard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-14 11:43:41

Od vim 7.3, można użyć set colorcolumn=80 (set cc=80 w skrócie).

Ponieważ wcześniejsze wersje tego nie obsługują, my .vimrc używa zamiast tego:

if exists('+colorcolumn')
  set colorcolumn=80
else
  au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
endif

Zobacz także dokumentację online dotyczącą opcji colorcolumn .

 739
Author: Jeremy W. Sherman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-30 04:26:32

Krótsza droga:

match ErrorMsg '\%>80v.\+'
 50
Author: Maksim Vi.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-27 23:48:08

Wolę:

highlight ColorColumn ctermbg=gray
set colorcolumn=80
 33
Author: wieczorek1990,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-22 14:17:40

Odpowiedź Simona Howarda jest świetna. Ale /\%81v.\+/ nie podświetla tabulatorów przekraczających kolumnę 81 . Tak więc zrobiłem trochę poprawek, w oparciu o rzeczy, które znalazłem na vim wiki i wybór kolorów HS powyżej:

highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9
match OverLength /\%>80v.\+/

A teraz vim podświetli wszystko, co przekracza kolumnę 80. Zdrowie!

 25
Author: Z.Zen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-22 04:31:55

Tutaj wpisz opis obrazka

Minimalistyczne, nie przesadzone podejście. Podświetlany jest tylko 79 znak zbyt długich linii. Pokonuje kilka typowych problemów: działa na nowych oknach, przepełnione słowa są odpowiednio podświetlone.

augroup collumnLimit
  autocmd!
  autocmd BufEnter,WinEnter,FileType scala,java
        \ highlight CollumnLimit ctermbg=DarkGrey guibg=DarkGrey
  let collumnLimit = 79 " feel free to customize
  let pattern =
        \ '\%<' . (collumnLimit+1) . 'v.\%>' . collumnLimit . 'v'
  autocmd BufEnter,WinEnter,FileType scala,java
        \ let w:m1=matchadd('CollumnLimit', pattern, -1)
augroup END

Uwaga: zauważ, że FileType scala,java to ogranicza to do plików źródłowych Scala i Java. Prawdopodobnie będziesz chciał to dostosować. Jeśli miałbyś to pominąć, działałoby to na wszystkich typach plików.

 13
Author: Dominykas Mostauskis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-30 18:05:21

Ładny sposób oznaczania tylko pierwszego znaku wychodzącego poza określone granice:

highlight ColorColumn ctermbg=magenta "set to whatever you like
call matchadd('ColorColumn', '\%81v', 100) "set column nr

Z rozmowy Damiana Conwaya .

 12
Author: Shanded,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-08 21:15:26

Możesz również narysować linię, aby zobaczyć limit 80:

let &colorcolumn=join(range(81,999),",")
let &colorcolumn="80,".join(range(400,999),",")

Wynik:

Tutaj wpisz opis obrazka

 11
Author: 0x8BADF00D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-15 17:14:08

Nowsze wersje Vima zezwalają na wartość :set numberwidth=x, która ustawia szerokość wyświetlania numeru linii. Nie używam składania itp, więc o tym Nie wiem. Rysowanie cienkiej pionowej linii wykracza jednak poza możliwości aplikacji konsolowej. GVim może na to pozwolić(nie używam go, więc nie mogę tam komentować).

 5
Author: Matthew Scharley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-24 23:31:17

Obawiam się, że ograniczyłeś zbiór rozwiązań, które pozostawiają ci zbiór null.

Użycie :set textwidth=80 naprawi wszystkie problemy, o których wspomniałeś z wyjątkiem, że nie możesz łatwo zobaczyć zbliżającego się limitu linii. Jeśli :set ruler, włączysz wyświetlanie pozycji x,y na pasku stanu, którego możesz użyć, aby zobaczyć, w której kolumnie się znajdujesz.

Poza Tym, Nie wiem, co ci powiedzieć. Szkoda stracić kolumnę liczb, złożyć kolumnę i podzielić tylko ponieważ musisz :set columns=80.
 4
Author: Lucas Oman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-24 22:39:59

Możesz spróbować tego:

au BufWinEnter * if &textwidth > 8
\ | let w:m1=matchadd('MatchParen', printf('\%%<%dv.\%%>%dv', &textwidth+1, &textwidth-8), -1)
\ | let w:m2=matchadd('ErrorMsg', printf('\%%>%dv.\+', &textwidth), -1)
\ | endif

, które ustawią dwa podświetlenia w każdym buforze, jeden dla znaków w 8 kolumnach przed tym, co jest ustawione &textwidth, i jeden dla znaków poza tą kolumną. W ten sposób masz pewne wyczekiwanie. Oczywiście możesz go dostosować, aby użyć innej szerokości, jeśli chcesz mniej lub bardziej przewidywać (za co płacisz w postaci utraty podświetlania składni w tych kolumnach).

 4
Author: Aristotle Pagaltzis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-25 05:39:41

Cóż, patrząc na kolumny pomocy, to nie jest tak naprawdę robione, aby zadzierać z.

W konsoli jest zwykle określana przez ustawienia konsoli ( tzn. jest wykrywana automatycznie); w GUI określa (i jest określana przez) szerokość okien gvim.

Więc normalnie pozwalasz konsolom i menedżerom okien wykonywać swoje zadania komentując set columns

Nie jestem pewien, co masz na myśli mówiąc "widzieć i przewidywać przepełnienie linii". Jeśli chcesz, aby EOL został wstawiony z grubsza kolumną 80, użyj set textwidth lub set wrapmargin; jeśli chcesz tylko miękkie owinięcie (tzn. linia jest owinięta, ale nie ma rzeczywistego EOL), a następnie grać z set linebreak i set showbreak.

 3
Author: Ding-Yi Chen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-28 03:56:40

Ten jest poza lewym polem, ale jest ładną mapką do zmiany rozmiaru bieżącego podziału na 80 znaków, jeśli masz numery linii na:

" make window 80 + some for numbers wide  
noremap <Leader>w :let @w=float2nr(log10(line("$")))+82\|:vertical resize <c-r>w<cr> 
 2
Author: ErichBSchulz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-29 13:21:05

Możesz spróbować ustawić rozmiar okna tak, aby zezwalał na 80 znaków rzeczywistego tekstu. To nadal nie działa z pionowymi podziałami.

let &co=80 + &foldcolumn + (&number || &relativenumber ? &numberwidth : 0)

To wymaga Vima 7+, 7.3 Dla relativenumber.

 1
Author: Mike L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-13 17:38:26