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.

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.


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

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.


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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.