Vim tip: come leggere i ChangeLog del kernel senza mali di testa
Chi ha regolarmente la malaugurata idea di leggere i ChangeLog del kernel sa bene di cosa sto parlando: dopo un po’ va insieme la vista e l’intera operazione diventa una sofferenza. Quelli delle rc1 in particolare sono decisamente corpose (l’ultimo supera i 5MB di testo non compresso, per un totale di 8739 commit spalmati in 140663 umili righe): la lettura diventa presto qualcosa di impossibile, dato che l’occhio comincia a saltellare su e giù e dopo un po’ dà forfait.
In questo ci viene d’aiuto il buon vecchio vim: prima di tutto per il testo bianco su sfondo nero, che è decisamente più riposante dell’opposto se usato con un font decente. In proposito consiglio terminus (pacman -S terminus-font), un monospace pensato appositamente per i terminali che mantiene un’ottima leggibilità anche in queste condizioni, in corpo 8 per chi ha la vista buona come il sottoscritto, 10 per gli altri. Poi c’è la syntax highlighting, che rende molto più facile il gioco della caccia al commit, da usare regolarmente in congiunzione con la linea set background=dark in /etc/vimrc o in ~/.vimrc per avere il giusto contrasto di colore.
Tutto questo è un buon inizio, resta il problema del saltellamento del bulbo oculare, la vera piaga di tutta la faccenda. Mentre si delineava nella mia testa tutto questo bel giochino ho pensato che un semplice /^commit seguito da tante n sarebbe bastato, e invece no: il cursore va a piazzarsi a fondo pagina, col risultato che vedo solo l’id del commit perdendomi completamente il contenuto. Essendo un utente medio di vim conosco qualche comandino da tastiera, ma non mi sono mai lanciato nell’uso avanzato. Mi sono quindi messo alla ricerca di un modo per far sì che la riga che matcha diventasse la prima della pagina, in modo da avere sempre la descrizione nello stesso punto e risparmiarmi una pupilla che sembra muoversi di moto browniano. E l’ho trovato.
Per far sì che la riga del cursore venga messa in cima alla pagina basta premere zt in modalità comandi. Dato che premere nzt 8739 volte non mi attirava granché, ho pensato di attivare un mapping che mi consentisse di usare un solo tasto per fare tutto. E dunque, ecco svelato l’arcano:
:nmap n nzt
Una volta fatto ciò, ad ogni pressione di n sarà come aver premuto in sequenza i tasti nzt, e dopo aver lanciato la ricerca (/^commit, come si diceva) potremo usare questo tasto per navigare comodamente il ChangeLog.
Posted by bardo under arch,g33k1ng around | Comments (4)
ottimo trucco ma io diventerei ebete comunque a leggere quei commit perché ci capirei poco o niente ^^, preferisco questi changelog per esseri umani:
http://kernelnewbies.org/LinuxChanges
Ciao
Comment by ugaciaka
— 28 June 2009 @ 10:13
@ugaciaka: hai ragione, ma questi changelog danno una buona visione d’insieme trlasciando però molte cose. Su KernelNewbies, che comunque offre un ottimo servizio, trovi soprattutto news di interesse generale, ma difficilmente parleranno, ad esempio, di un driver che ti interessa ed è stato aggiornato, o di un bug che ti dava problemi ed è stato fixato. E poi dopo un po’ ci si abitua al linguaggio, e si comincia a filtrare via la roba che non interessa
Comment by bardo
— 28 June 2009 @ 13:45
Potrei errare, ma non è zt invece di ft?
Su :help non ho trovato traccia di “ft” e “zt” fa esattamente quello che dici tu.
Visto che ci sono ti consiglio di dare un occhio alla opzione “scrolloff”, siccome è difficile spiegare cosa fa, copio da :help so
Minimal number of screen lines to keep above and below the cursor.
This will make some context visible around where you are working. If you set it to a very large value (999) the cursor line will always be in the middle of the window (except at the start or end of the file or when long lines wrap).
Comment by molok
— 30 June 2009 @ 01:59
@molok: accidenti, sono veramente stordito… chiaramente intendevo zt
Ho corretto, grazie della segnalazione. Ricordavo che esisteva scrolloff, ma non trovavo il nome, quindi sono andato su qualcosa di più “diretto”.
Comment by bardo
— 30 June 2009 @ 13:45