Ενα από τα τυπικά πράγματα που ένας χρήστης μπορεί να χρειαστεί να κάνει στην καθημερινότητα του είναι να επεξεργαστεί ένα μεγάλο αρχείο κειμένου και να αντικαταστήσει κάποιον χαρακτήρα με έναν άλλο.
Στο Vim, βρίσκουμε και αντικαθιστούμε χαρακτήρα πατώντας Esc και μετά : για να μπούμε σε περιβάλλον εντολών. Μετά γράφουμε μια εντολή της μορφή:
%s/αρχικό/τελικό/g
Εδώ το %s λέει στο vim να ψάξει σε όλο το κείμενο. Οι κάθετοι / / διαχωρίζουν αυτό που ψάχνουμε (αρχικό) και αυτό με το οποίο θέλουμε να το αντικαστήσουμε (τελικό).
Το 'αρχικό' και το 'τελικό' δεν χρειάζεται να είναι λέξεις ή χαρακτήρες. Μπορεί να είναι και ειδικοί χαρακτήρες.
Για παράδειγμα, με την παρακάτω εντολή βρήκα όλα τα \n σε ένα html αρχείο και τα αντικατέστησα με πραγματική αλλαγή γραμμής:
%s/\\n/\r/g
Δηλαδή το παρακάτω κείμενο:
μπλαμπλα\nμπλιμπλι
μετατράπηκε σε
μπλαμπλα μπλιμπλι
- Συνδεθείτε ή εγγραφείτε για να σχολιάσετε
Σχόλια
Πολύ καλή παράθεση Δημήτρη, και απλά θέλω να προσθέσω τα εξής:
* Ο οριοθέτης της εντολής μπορεί εκτός από το ( / ) να είναι:
! " # $ % ^ & * ( ) { } [ ] _ - + =@ ~ , . < > ?
έτσι ώστε ανάλογα με το κείμενο που θέλουμε να αντικαταστήσουμε να έχουμε ευκρίνεια η οποία χάνεται με τα πολλά escapes ( \ )
π.χ.
:%s@/pathAlpha/fileAlpha@/pathBravo/fileBravo@g
είναι ευκρινέστερο του:
:%s/\/pathAlpha\/fileAlpha/\/pathBravo\/fileBravo/g
* Όταν θέλουμε να αντικαταστήσουμε μόνο σε ορισμένες γραμμές, μπορούμε να γράψουμε την εντολή ως εξής:
:45s/αρχικό/τελικό/g (Η αντικατάσταση γίνεται μόνο στη γραμμή 45 του κειμένου)
:23,45s/αρχικό/τελικό/g (Η αντικατάσταση γίνεται σε όλες τις γραμμές μεταξύ των γραμμών 23 και 45)
:15,.s/αρχικό/τελικό/g (Η αντικατάσταση γίνεται από την γραμμή 15 μέχρι τη γραμμή που είναι ο cursor)
:57,$s/αρχικό/τελικό/g (Η αντικατάσταση γίνεται από τη γραμμή 57 μέχρι και την τελευταία γραμμή του κειμένου)
:.,$s/αρχικό/τελικό/g (Η αντικατάσταση γίνεται από τη γραμμή που είναι ο cursor μέχρι και την τελευταία γραμμή του κειμένου)
Σημείωση: Οι εντολές :%s/αρχικό/τελικό/g και :1,$s/αρχικό/τελικό/g κάνουν ακριβώς το ίδιο.