Fai in modo che Vim visualizzi una linea sul bordo della larghezza di testo impostata


26

La maggior parte degli editor di testo e degli IDE che utilizzo in questi giorni hanno una funzione in cui possono visualizzare una riga a una determinata lunghezza di caratteri nel buffer di testo. È utile quando si desidera mantenere le linee in un file di una certa lunghezza.

C'è un modo per convincere Vim a farlo, preferibilmente usando il textwidthvalore già definito ? Le linee si chiuderanno automaticamente a quel punto, ma mi piacerebbe davvero vedere anche dove si trova.

Nel caso in cui sia importante, sto usando principalmente gVim su Windows, ma mi piacerebbe che la soluzione funzionasse su tutte le versioni di Vim.

Risposte:


41

per (g) vim, utilizzare quanto segue:

set colorcolumn=80

o qualunque larghezza desideri. Funziona sia in vim che in gvim. Ho il mio all'interno di un IF, quindi è condizionato in base al tipo di file che modifico.

Puoi anche usare una + x / -x per basare la posizione della colonna +/- da & textwidth.

set textwidth=80
set colorcolumn=-2

disegna effettivamente la barra colorata nella posizione 78 del carattere. Naturalmente, puoi impostare tu stesso la larghezza del testo, quindi potrebbe essere 0 (impostazione predefinita). Uso il modulo di posizione assoluta.

Puoi anche cambiare il colore usato se desideri:

highlight ColorColumn ctermbg=green guibg=orange

(Non consiglio QUESTI colori però)

Questa opzione è stata aggiunta in (g) vim 7.3.


In quale versione di Vim è supportato? Non funziona per me in gvim 7.2.
Herms

Sto correndo 7.3. Ho appena estratto il codice sorgente e ho guardato, questo comando è stato introdotto in 7.3.
lornix

Funziona per me su Ubuntu 12.04 con vim 7.3. gvim 7.3 per Windows è disponibile da almeno ottobre del 2010. @Herms puoi fare in modo che questa sia la risposta?
poindexter,

Sarebbe bello se funzionasse quando si utilizzano più finestre affiancate. Il mio monitor è abbastanza largo da mostrare diverse finestre di fila, ognuna> 80 caratteri, ma colorColumn funziona solo sulla prima finestra (all'estrema sinistra).
Eno

3

C'è un frammento di Google Code che puoi provare:

augroup vimrc_autocmds
au!
    autocmd BufRead * highlight OverLength ctermbg=red ctermfg=white guibg=#592929 
    autocmd BufRead * match OverLength /\%81v.*/
augroup END

Hmm, quel thread suggerisce che gvim di Windows lo supporta già, ma non riesco a capire come accenderlo.
Herms,

C'è del codice da aggiungere al tuo file gvimrc più in basso nel thread.
EBGreen

sembra che cambi solo lo sfondo dei personaggi che vanno oltre quella linea. Preferirei avere una guida sempre visibile come hanno fatto altri editor.
Herms,

A causa della natura della GUI, non sono sicuro che sia attualmente possibile.
EBGreen

Questo non si adatta alla larghezza del testo come richiesto nella domanda.
Steven Roose,

2

Per una risposta StackOverflow :

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

Regola secondo i tuoi gusti.


Hm, non proprio quello che sto cercando (viene visualizzato solo quando i personaggi superano la linea), ma è meglio di niente.
Herms,

Questo non si adatta alla larghezza del testo come richiesto nella domanda.
Steven Roose,

1

Mi piace lornix' rispondo molto ma io non voglio mettere in evidenza la colonna per tutto il tempo , solo quando almeno una linea supera il limite di lunghezza:

mostrando la colonna quando le linee sono troppo lunghe

Ecco come lo faccio per i miei file 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

Questo è stato spesso discusso su #vim e in alcuni forum. Per quanto riguarda le cose adesso, non è possibile. Quindi la soluzione menzionata è la tua unica opzione, afaik.

Il fatto è che vim può fare qualsiasi cosa con luoghi in cui ci sono personaggi (che sono lettere, numeri o semplicemente spazi bianchi). Ma non può dipingere uno sfondo di un colore diverso (come vorresti), se non c'è nulla lì. E prima di digitare qualcosa, non c'è nulla lì, quindi non può disegnare una linea / margine.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.