Niech Vim wyświetla linię na krawędzi ustawionej szerokości tekstu

26

Większość edytorów tekstu i IDE, których używam obecnie, ma funkcję, w której mogą wyświetlać wiersz w buforze tekstowym o określonej długości znaków. Jest to przydatne, gdy chcesz zachować linie w pliku o określonej długości.

Czy jest jakiś sposób, aby zmusić Vima do zrobienia tego, najlepiej używając już zdefiniowanej textwidthwartości? W tym momencie linie zostaną automatycznie zawinięte, ale naprawdę chciałbym zobaczyć, gdzie to jest.

W razie potrzeby używam gVim głównie w systemie Windows, ale chciałbym, jeśli rozwiązanie działa w różnych wersjach Vima.

Herms
źródło

Odpowiedzi:

41

w przypadku (g) ​​vim użyj następujących poleceń:

set colorcolumn=80

lub jakąkolwiek szerokość chcesz. Działa zarówno w vimie, jak i gvimie. Mam mój w IF, więc jest to zależne od tego, jaki typ plików edytuję.

Możesz także użyć + x / -x, aby ustawić pozycję kolumny +/- od & szerokość tekstu.

set textwidth=80
set colorcolumn=-2

narysuje kolorowy pasek w pozycji char 78. Oczywiście możesz samodzielnie ustawić szerokość tekstu, więc może to być 0 (domyślnie). Używam bezwzględnego formularza pozycji.

Możesz również zmienić używany kolor, jeśli chcesz:

highlight ColorColumn ctermbg=green guibg=orange

(Nie polecam TYCH kolorów)

Ta opcja została dodana w (g) vim 7.3.

lornix
źródło
W jakiej wersji Vima jest to obsługiwane? To nie działa dla mnie w gvim 7.2.
Herms,
Używam 7.3. Właśnie wyciągnąłem kod źródłowy i spojrzałem, to polecenie zostało wprowadzone w 7.3.
lornix,
Działa dla mnie na Ubuntu 12.04 z vimem 7.3. gvim 7.3 dla Windows jest dostępny od co najmniej października 2010 roku. @Herms, czy możesz to odpowiedzieć?
poindexter
Byłoby miło, gdyby działało to przy korzystaniu z wielu okien obok siebie. Mój monitor jest wystarczająco szeroki, aby wyświetlać kilka okien z rzędu, każdy> 80 znaków, ale colorColumn działa tylko w pierwszym oknie (najbardziej po lewej).
Eno
3

W kodzie Google znajduje się fragment kodu, który możesz wypróbować:

augroup vimrc_autocmds
au!
    autocmd BufRead * highlight OverLength ctermbg=red ctermfg=white guibg=#592929 
    autocmd BufRead * match OverLength /\%81v.*/
augroup END
Mcandre
źródło
Hmm, ten wątek sugeruje, że gvim systemu Windows już go obsługuje, ale nie mogę wymyślić, jak go włączyć.
Herms,
Jest trochę kodu do dodania do pliku gvimrc w dalszej części wątku.
EBGreen,
wygląda na to, że po prostu zmienia tło znaków, które wykraczają poza tę linię. Wolę mieć zawsze widoczny przewodnik, tak jak inni redaktorzy.
Herms,
Ze względu na charakter GUI nie jestem pewien, czy jest to obecnie możliwe.
EBGreen,
To nie dostosowuje się do szerokości tekstu, jak żądano w pytaniu.
Steven Roose,
2

Na odpowiedź StackOverflow :

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

Dostosuj do swojego gustu.

jtimberman
źródło
Hm, nie do końca to, czego szukam (wyświetla się tylko, gdy postacie przekraczają linię), ale jest lepsze niż nic.
Herms,
To nie dostosowuje się do szerokości tekstu, jak żądano w pytaniu.
Steven Roose,
1

Bardzo lubię odpowiedź lornix, ale nie chcę cały czas podświetlać kolumny , tylko gdy co najmniej jedna linia przekracza limit długości:

pokazuje kolumnę, gdy linie są za długie

Oto jak to zrobić dla moich plików Haskell:

augroup HaskellCommands
autocmd!
  " When a Haskell file is read or the text changes in normal or insert mode,
  " draw a column marking the maximum line length if a line exceeds this length
  autocmd BufRead,TextChanged,TextChangedI *.hs call ShowColumnIfLineTooLong(80)
augroup END

" Color the column marking the lengthLimit when the longest line in the file
" exceeds the lengthLimit
function! ShowColumnIfLineTooLong(lengthLimit)
  " See /programming/2075276/longest-line-in-vim#2982789
  let maxLineLength = max(map(getline(1,'$'), 'len(v:val)'))

  if maxLineLength > a:lengthLimit
    highlight ColorColumn ctermbg=red guibg=red
    " Draw the vertical line at the first letter that exceeds the limit
    execute "set colorcolumn=" . (a:lengthLimit + 1)
  else
    set colorcolumn=""
  endif
endfunction
Matthias Braun
źródło
0

Często było to omawiane na #vim i na niektórych forach. W obecnej sytuacji nie jest to możliwe. Więc wspomniane rozwiązanie jest twoją jedyną opcją, afaik.

Chodzi o to, że vim może zrobić wszystko z miejscami, w których są znaki (są to litery, cyfry lub po prostu biała spacja). Ale nie może namalować tła w innym kolorze (tak jak byś chciał), jeśli nie ma tam nic. A zanim coś wpiszesz, nic tam nie ma, więc nie może narysować linii / marginesu.

Wieża
źródło