Aggiunta di un blocco di intestazione commento largo 80 colonne con testo centrato


9

Per un motivo o per l'altro spesso divido il codice in sottosezioni separate da intestazioni come queste:

################################################################################
#################################### LOAD ######################################
################################################################################

Queste sono 3 linee larghe di 80 colonne #con un titolo centrato nel mezzo. Finora non ho trovato un modo rapido per generare questi in vim.

Quello che faccio di solito è qualcosa sulla falsariga di 80i#e poi yyppdi darmi 3 righe, ma poi devo navigare verso il centro e aggiungere del testo. Di solito lo faccio con sostituisci, ma sostituisci non centra l'intestazione all'interno #... #Quindi cancello #manualmente l'eccesso di .

Come centrare il testo nella riga centrale? E quale sarebbe un modo più veloce per raggiungere questo risultato?

Risposte:


16

Ecco un metodo leggermente più efficiente / più semplice. Digitalo con il cursore all'inizio della riga di testo (cioè LOAD) che vuoi centrare.

  • :center 80<cr>: centra il testo con la funzione integrata di Vim
  • hhv0r#: aggiungi la #s a sinistra
  • A<space><esc>40A#<esc>: aggiungi molte #s sulla destra
  • d80|: elimina i messaggi in eccesso #a destra
  • YppVr#kk.: All'inizio ADD e inferiore #s

Quindi, il comando completo:

:center 80<cr>hhv0r#A<space><esc>40A#<esc>d80<bar>YppVr#kk.

Puoi aggiungere qualcosa del genere nel tuo .vimrc per aggiungere una comoda mappatura:

nnoremap <C-b> :center 80<cr>hhv0r#A<space><esc>40A#<esc>d80<bar>YppVr#kk.

Dimostrazione mini-screencast:

dimostrazione


3

Innanzitutto, è necessario :set expandtab.

  1. 80i#Esc per creare la linea superiore
  2. Yp per duplicarlo
  3. OSpaceLOADSpaceEsc
  4. :center 80( 80Potrebbe essere omesso, a seconda delle textwidthimpostazioni.)
  5. hhv0r# per riempire il lato sinistro (usando la selezione e sostituzione visiva)
  6. $hjlly$kp riempire il lato destro (duplicando alcuni caratteri dalla riga inferiore)

3

Vorrei usare una funzione vimscript per questo.

function Header(width, word)
    let a:inserted_word = ' ' . a:word . ' '
    let a:word_width = strlen(a:inserted_word)
    let a:length_before = (a:width - a:word_width) / 2
    let a:hashes_before = repeat('#', a:length_before)
    let a:hashes_after = repeat('#', a:width - (a:word_width + a:length_before))
    let a:hash_line = repeat('#', a:width)
    let a:word_line = a:hashes_before . a:inserted_word . a:hashes_after

    :put =a:hash_line
    :put =a:word_line
    :put =a:hash_line
endfunction

E potrebbe essere chiamato come

: call Header(80, 'Hello')

1
Grazie, questa è davvero un'ottima risposta. Funziona con qualsiasi numero di righe e può anche essere modificato per includere facilmente altri caratteri (non solo #). Peccato che posso dare solo 1 voto e accettare una sola risposta. Questa volta ho dovuto scegliere quello con cui ho più familiarità (e scrivere funzioni - non ne ho familiarità, ma grazie a te vedo come funzionano).
Karolis Koncevičius,

2

Oppure potresti usare i blocchi visivi:

  1. Assicurati di avere già almeno tre righe vuote in alto, quindi CtrlV80L

  2. R#

  3. Spostati al centro del blocco (dovrai guardarlo negli occhi)
  4. CtrlV e seleziona l'area del blocco che desideri rimuovere
  5. RSpace
  6. Vai all'inizio dello spazio vuoto, premi Re digita l'intestazione.

Certo, non è il modo più perfetto per creare un'intestazione, dato che devi guardarla negli occhi, ma è un caso interessante per la selezione di Visual Block.

Risultato

#################################################################################
##########################    this is a header      #############################
#################################################################################
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.