Vi tips & tricks

| | |

Τα βασικά..

Πως γράφουμε το πρώτο μας κείμενο στον vi.

Με h,j,k,l μετακινείσαι στο κείμενο (αριστερά,κάτω,πάνω,δεξια).

Πατώντας i, μπαίνεις σε insert mode και αρχίζεις να γράφεις στο σημείο του κέρσορα ενώ με I αρχίζεις να γράφεις στην αρχή της γραμμής. Αντοίστιχα με a και A γραφεις μετά τον κέρσορα και στο τελος της γραμμής.

Για να επιστρέψεις σε normal mode πατάς ESC και μπορείς αν θέλεις να σβήσεις με x ένα γραμμα, και με dd μια γραμμη.

Tέλος για να βγείς απο τον vi, δίνεις σε normal mode :w για να σώσεις το αρχείο ή :w filename για να το σώσεις με όνομα filename και :q για να κλείσεις τον editor (Δίνοντας : σε normal mode μπαίνεις σε command mode το οποίο είναι και το τρίτο mode του vi).






Τώραααα...

Σημαντικές εντολές

Το undo ειναι u και το redo ctrl-r :)

Παίζοντας με τα αρχεία

Με :e file2 ανοίγεις ένα δεύτερο αρχείο κλείνοντας αυτό που τυχόν έχεις ανοικτό. Mε e# ή ctrl-^ στον vim μετακινείσαι από το αρχείο που βρίσκεσαι στο προηγούμενο που είχες ανοίξει: πηγαινόρχεσαι ανάμεσα σε δύο αρχεία. Χρήσιμο για να μεταφέρεις κείμενο από ένα αρχείο σε ένα άλλο.

Στον Vim (Vi iMproved) τώρα, υπάρχει η δυνατότητα να έχεις πολλά αρχεία ανοιγμένα σε μία οθόνη: :new filename... και με ^w^w (όπου ^w θα σημαίνει από εδώ και πέρα ctrl-w) πηγαίνεις από το ένα στο άλλο.

Μπορείς και να αλλαξεις το μέγεθός τους: ^w+ , ^w- για να μεγαλώσεις/μικρύνεις το παράθυρο ενώ ^w_ είναι το maximize που λένε και ^w= φέρνει τα παράθυρα στα ίσια τους.

Με ^ws ανοίγεις το ίδιο αρχείο σε δύο παράθυρα ώστε να μπορείς να κοιτάς ταυτόχρονα μακρινά μεταξύ τους σημεία του αρχείου, ενώ με το απίστευτα χρήσιμο ^wf ανοίγει σε νέο παραθυρο το αρχείο στο όνομα του οποίου βρίσκεται ο κέρσορας.

Τέλος τα τελευταία αρχεία που άνοιξε κανείς είναι μαρκαρισμένα στα marks 0-9, μπορεί κανείς να τα δει δίνοντας :marks και να μετακινηθεί άμεσα σε αυτά με `0, `1 κτλ. όπου το 0 είναι το παρόν αρχείο.

Παράδειγμα των παραπάνω:

Μπορείς να ανοίξεις με τον vi μια σελίδα του internet κατευθείαν π.χ. vi 'http://www.linux.org/', αλλά και να ακολουθήσεις τα links πηγαίνοντας πάνω στα ονόματά τους και πατώντας ^wf για να ανοίξει σε καινούριο παράθυρο ή απλά ^o για να ανοίξει στο ίδιο.

Κίνηση και θέσεις στο κείμενο

οι αριθμοί στον vi έχουν έννοια επανάληψης όταν ακολουθούνται από μια οποιαδήποτε εντολή: 15j σημαίνει 15 γραμμές κάτω, 5l σημαίνει 5 γράμματα δεξιά. Αλλά υπάρχουν και άλλοι, ποιό εύκολοι τρόποι να μετακινηθείς στο κείμενο:
gg ή [ σε πηγαίνει στην αρχή του κειμένου, το πολύ χρήσιμο `` σε πηγαίνει στο σημείο που ήσουν πριν την τελευταία μετακίνηση, το G ή ] σε πηγαίνουν αντίστοιχα στο τέλος του κειμένου.

Η παράγραφος ορίζεται από τα { για την αρχή και } για το τέλος της, b και e είναι αντίστοιχα το τέλος και η αρχή της λέξης ενώ w είναι η αρχή της επόμενης λέξης. Ακόμα ^ είναι η αρχή της γραμμής και $ το τέλος της

Με H πηγαίνεις το πάνω μέρος της οθόνης, με M στο κέντρο και L στο τέλος, και ένα απλό zz φέρνει την γραμμή που βρίσκεται ο κέρσορας στο κέντρο της οθόνης

Αλλά και για όποιον δεν φτάνουν αυτά, μπορεί να ορίσει τις δικές του θέσεις στο κείμενο με το "m": my θα μαρκάρει την θέση που βρίσκεσαι στο mark y, και είναι δυνατόν από οποιαδήποτε σημείο να ξαναπάς εκεί με `y. Μπορείς να χρησιμοποιήσεις οποιοδήποτε γράμμα για mark αλλά όχι αριθμούς καθώς όπως είπαμε χρησιμοποιούνται για τα τελευταία ανοιγμένα αρχεία.

Yank, delete και paste

Για να μαρκάρεις κάτι ώστε να το αντιγράψεις μετά κάπου αλλού υπάρχει η εντολή y (yank). Μπορεί να ακολουθείται από οποιαδήποτε εντολή μετακίνησης, οπότε θα μαρκάρει το αντίστοιχο κομμάτι του κειμένου: y3l κάνει yank μέχρι τρία γράμματα δεξιά, y3j μέχρι τρεις γραμμές κάτω κτλ. Μία συντόμευση για να πάρει μονο την τρέχουσα γραμμή είναι το yy.

Αν 8έλεις π.χ. 3 γραμμές αρκεί ένα 3yy. Άν τώρα 8έλεις όλο το κείμενο αρκει ένα gg(για να πάς στην αρχή του κειμένου) και yG. για να μαρκάρεις μέχρι το τέλος). Αν θέλεις την παράγραφο είναι {y}.

Το paste είναι πάντα p σε edit mode, ενώ αν είσαι σε insert mode ( έχεις πατήσει καποιο από τα γράμματα για να γράψεις) είναι ctrl-r".
Δεν υπάρχει 'cut-paste' στον vi καθώς ούτως ή άλλως όλα τα τελευταία σβησίματα μένουν στους registers 0-9, και πάντα το τελευταίο μένει και στον register ". Άρα για να κόψεις μια γραμμή και να την βάλεις σε ένα άλλο σημείο, αρκεί ένα dd και p ή ctrl-r" στο σημείο που θέλεις. Με :reg βλέπεις τους registers και για να επαναφέρεις τον register 6 γράφεις "6p^r6).

Μπορείς επίσης τα σβησίματα (ή τα yank) να τα κρατήσεις σε ένα άλλο register π.χ. στο m : "myy (κρατάει στον register m την γραμμή που βρίσκεται ο κέρσορας) και με "mp το γράφει.

Ακόμα καλύτερα μπορεί να κόψει λίγο από εδώ, λίγο από εκεί και να τα βάλει όλα μαζί σε ένα register αρκεί να δίνεις κεφαλαίο το γράμμα του register μετά το πρώτο yank: "My κτλ

Find and replace

Το απλό find γίνεται με ένα /whattofind. Το n σε πάει στο επόμενο που βρίσκει και το N στο προηγούμενο. Replace τυπικά γίνεται με την εντολή :s :

:%s/whattofind/replacewith/g για όλο το κείμενο

:%s/whattofind/replacewith/gc για όλο το κείμενο με confirm

:2,35s/whattofind/replacewith/g για τις γραμμες 2-35

:5,$s/whattofind/replacewith/g από 5 ως το τέλος

Διάφορα άλλα tips

Το Auto-completion γίνεται με ctrl-p σε insert mode.

Όλα κεφαλαία; gg(για να πας στην αρχή του κειμένου) gU (η εντολή) G (μέχρι το τέλος του κειμένου). Όλα μικρά; gg guG

Όπως είπαμε με /whattofind ο vi κάνει search... το search όμως δουλεύει και σαν εντολή κίνησης: y/whattofind κανει yank από το σημείο που βρίσκεται ο κέρσορας μέχρι το ζητούμενο..

Οποιαδήποτε εντολή επαναλαμβάνεται με την τελεία . : π.χ. για να προσθέσεις ένα # στην αρχή μερικών γραμμών μπορείς να κάνεις I# και μετά να επαναλαμβάνεις με . - το # θα μπαίνει πάντα στην αρχή της γραμμής.

Δοκιμάστε να πάτε πάνω σε ένα αριθμό και να πατήσετε ctrl-a 15ctrl-a 16ctrl-x :)

Με J ενώνονται δυο γραμμές για όσους δεν το ήξεραν και >> μετακινείται η γραμμή ένα tab δεξιά και αντοίστοιχα αριστερά. 6J θα ενώσει 6 γραμμές, 8>> θα μετακινήσει 8 γραμμές και {>} θα μετακινήσει την τρέχουσα παράγραφο !

Το ctrl-v ξεκινάει ένα visual block στον vim σε escape mode: Κάντε ένα ctrl-v jjjlll κάπου στην πάνω αριστερά μεριά και μετα πατήστε y και άν δεν καταλάβατε τι έγινε πατήστε d:)). Όλες οι εντολές μπορούν να εφαρμοστούν στο μαρκαρισμένο block. Δοκιμάστε την >. Ειδικά σε συνδυασμό με την p είναι δυνατόν να μετακινηθούν στήλες κειμένου! (Το απλό v μαρκάρει με τον συνηθισμένο τρόπο).

Είστε πάνω σε μια λέξη και θέλετε να βρείτε που αλλου υπάρχει αυτή; * . Μήπως θέλετε την man page; ctrl-k. Και σε insert mode το ctrl-y θα αντιγράψει την απο πάνω γραμμή και το ctrl-e την αποκάτω !!

Το :r blah φέρνει τα περιεχόμενα του αρχείου blah στο τρέχον αρχείο, ενώ το :r !command βγάζει το output της εντολής command μέσα στο αρχείο.

p.s.

Η σελίδα αυτή δεν περιλαμβάνει ούτε ένα μικρό ποσοστό των πραγμάτων που μπορεί να κάνει ο vi(m). Είναι μια εισαγωγή στην χρήση του και έτσι πρέπει να αντιμετωπίζεται. Περιλαμβάνει πραγματάκια χρήσιμα σε καθημερινή χρήση μόνο. Δυστυχώς δεν γνωρίζω να υπάρχει κάποιο καλό ελληνικό εγχειρίδιο του vim αλλά το ίδιο το πρόγραμμα περιλαμβάνει ένα πάρα πολύ καλό σύστημα βοήθειας στα αγγλικά που είναι προσβάσιμο δίνοντας :help.

Για λάθη ή βελτιώσεις στείλτε email στον manolism στο gmail.com