Πρώτο commit
Αυτό το commit περιλαμβάνεται σε:
commit
8ec8e9bee2
451 αρχεία άλλαξαν με 46736 προσθήκες και 0 διαγραφές
272
content/articles/27/02_vitips.md
Κανονικό αρχείο
272
content/articles/27/02_vitips.md
Κανονικό αρχείο
|
@ -0,0 +1,272 @@
|
|||
+++
|
||||
title = 'vi Tips'
|
||||
date = '2000-10-01T00:00:00Z'
|
||||
description = ''
|
||||
author = 'Βούλα Σανίδα(mailto:voulariba@eeea.gr)'
|
||||
issue = ['Magaz 27']
|
||||
issue_weight = 2
|
||||
+++
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
*Tips στον vi (Μα δεν χρειάζονται, είναι τόσο απλός\...)*
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Ποιός τόλμησε να πει πως το vi είναι δύσχρηστο; Μερικά απλά tips για να κάνετε την ζωή σας ευκολότερη\...
|
||||
|
||||
**1. Practical leaflet**
|
||||
-------------------------------------------------
|
||||
|
||||
**2. crash course theory leaflet**
|
||||
-----------------------------------------------------------
|
||||
|
||||
- [2.1 θεωρία 1](#ss2.1)
|
||||
- [2.2 θεωρία 2](#ss2.2)
|
||||
- [2.3 θεωρία 3](#ss2.3)
|
||||
|
||||
|
||||
### [1. Practical leaflet]{#s1}
|
||||
|
||||
**tip 1**: Για να βλέπετε στο κάτω μέρος της οθόνης την τρέχουσα γραμμή και στήλη:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:set ruler
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(αν θέλετε τέτοιες ρυθμισεις να ισχύουν πάντα δημιουργείστε στο \$HOME σας ένα αρχείο .vimrc και γράψτε εκεί την παραπάνω εντολή).
|
||||
|
||||
**tip 2**: Διαλέξτε κομμάτια κειμένου με τα πλήκτρα (σαν να χρηιμοποιείτε ποντίκι):\
|
||||
Πατήστε v για VISUAL MODE. Με τα πλήκτρα διαλέξτε τις γραμμές του κείμενο που θέλετε. Λειτουργεί το page-up, page-down για να διαλέξετε ολόκληρες οθόνη.
|
||||
Μπορείτε να χρησιμοποιείσετε regular expressions (π.χ. /test) για να επιλέξω το κείμενο μέχρι την πρώτη εμφάνιση της λέξης test.\
|
||||
Εναλλακτικά,. πατήστε Ctrl-v για VISUAL BLOCK και διαλέξτε το κείμενο που θέλετε κατά στήλες (κατακόρυφα).
|
||||
|
||||
- Αντιγράφετε το κείμενο.
|
||||
- Με p κάνετε επικόλληση (paste).
|
||||
- Με d διαγράφετε το μαρκαρισμένο κείμενο.
|
||||
|
||||
**tip 3**: Πως αφαιρούμε ΟΛΑ τα html tags από μια html σελίδα και μένει μόνο plain text κείμενο:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:g/<[^>]*>/s///g
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**tip 4**: Πώς σβήνουμε το mail header από ένα email, ώστε να μείνει μόνο το body του:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:1,/^$/d
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
(ουσιαστικά σβήνουμε από την 1η γραμμή μέχρι να βρούμε την πρώτη κενή γραμμή)
|
||||
|
||||
**tip 5**: Πως αντικαθιστούμε τη λέξη καλό με τη λέξη πολύ καλό σε όλο το κείμενο και σε όλες τις εμφανίσεις σε κάθε γραμμή, με χρήση του τελεστή &:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:%s/καλό/πολύ &/g
|
||||
(εναλλακτικά :%s/καλό/πολύ καλό/g, αν και δεν είναι και τόσο δυναμικό)
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**tip 6**: Πως κλείνουμε σε /\* \... \*/ την τρέχουσα γραμμή:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:s/.*/\/* & *\//
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**tip 7**: Πως βάζουμε τις 5 πρώτες γραμμές σε σχόλια τύπου shell (\#):
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:1,5s/.*/# &/
|
||||
(ή ισοδύναμα :1,5s/^/# /)
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**tip 8**: Πως διαγράφουμε όλες τις κενές γραμμές του κειμένου:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:g/^$/d
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**tip 9**: Πως σβήνουμε τα κενά πριν από κάθε γραμμή
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:g/^ *\(.*\)/s//\1/g
|
||||
(ή ισοδύναμα :g/^ */s///g)
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**tip 10**: Πως διπλασιάζουμε τον αριθμό των κενών μεταξύ των λέξεων
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:%s/ */&&/g
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**tip 11**: Ανταλλαγή μέρας-μήνα. Η ημερομηνία από τη μορφή 21-03-1999 θα γίνει 03-21-1999
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:%s/\([0-9]\{1,2\}\)-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/\2-\1-\3/g
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**tip 12**: Πώς αντιστρέφουμε 2 στήλες που διαχωρίζονται μεταξύ τους με άνω κάτω τελεία :
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:%s/\(.*\):\(.*\)/\2:\1/g
|
||||
(ναι, με awk είναι πιο εύκολο, όντως!)
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**tip 13**: Πως διαγράφουμε τους 4 πρώτους χαρακτήρες σε κάθε γραμμή του κειμένου
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:%s/^....//g
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**tip 14**: Σε περίπτωση που γράφουμε ένα βιβλίο με references της μορφής \"Δείτε το κεφάλαιο ΧΧ.ΥΥ\", όπου Χ και Y αριθμοί, και θέλουμε να βάλουμε τέτοιες
|
||||
εμφανίσεις σε παρενθέσεις:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:%s/Δείτε το Κεφάλαιο [1-9][0-9]*\.[1-9][0-9]*/(&)/g
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**tip 16**: Βαρεθήκατε να χρησιμοποιείτε το \\ σαν unescape χαρακτήρα για τον χαρακτήρα /; Αλλάξτε το διαχωριστή (delimiter) / της εντολής s (π.χ. με τον
|
||||
χαρακτήρα θαυμαστικό !).\
|
||||
**Παράδειγμα:** Θέλω να αντικαταστήσω το /usr/doc/HOWTO /usr1/doc2/HOWTO3:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
:%s/\/usr\/doc\/HOWTO/\/usr1\/doc2\/HOWTO3 (ο παλιός δύσκολος τρόπος)
|
||||
:%s!/usr/doc/HOWTO!/usr1/doc2/HOWTO3! (ο νέος και εύκολος)
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
tip16: Α\....εννοείτε πως για να ψάξουμε για μια έκφραση (π.χ. lalakis) η εντολή είναι:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/lalakis
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
### [2. crash course theory leaflet]{#s2}
|
||||
|
||||
### [2.1 θεωρία 1]{#ss2.1}
|
||||
|
||||
Aντικαταστάσεις:
|
||||
|
||||
H εντολή αντικατάστασης έχει την μορφή: \[address\]s/oldregexp/newregexpr\[/flags\] όπου :
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
[..] = προεραιτικό μέρος της εντολής, μπορείτε να το παραλείψετε
|
||||
oldregexp = τι να αντικαταστήσουμε
|
||||
newregexp = με τι
|
||||
address = σε ποιο διάστημα (range) κειμένου θα γίνει η αντικατάσταση
|
||||
flags = αν θα ρωτάει για κάθε αντικατάσταση, αν θα το κάνει σε όλο
|
||||
το κείμενο, αν θα τα δείχνει κλπ...
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Ετσι, το address μπορεί να είναι:
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
% = θα εφαρμοστεί σε όλο το κείμενο
|
||||
1,5 = θα εφαρμοστεί από τη γραμμή 1 μέχρι την 5
|
||||
1,$ = θα εφαρμοστεί από τη γραμμή 1 ως και την τελευταία (σε όλο
|
||||
δηλαδή το κείμενο)
|
||||
= (τίποτα), θα εφαρμοστεί στην τρέχουσα γραμμή
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Μερικά flags μπορούν να είναι
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
g = θα εκτελεστεί η εντολή σε όλα τις εμφανίσεις τρέχουσας γραμμής
|
||||
(Μια καλή ερώτηση που θα περιμένα να έχετε: Αν έχω για address το % ,
|
||||
δεν είναι ισοδύναμο; Μια καλή απάντηση είναι ΟΧΙ. Αν παραλείψετε το g
|
||||
στα flags τότε το vi θα ψάξει για την oldregexp σε όλο το κείμενο αλλά
|
||||
αντικατάσταση θα γίνει ΜΟΝΟ για την πρώτη εμφάνιση της oldregexp ΣΕ ΚΑΘΕ
|
||||
ΓΡΑΜΜΗ. Αρα αν μια γραμμή περιέχει δύο φορές την oldregexp χρειάζεστε
|
||||
το flag g.)
|
||||
gc = θα ρωτά για κάθε αντικατάσταση πριν την κάνει
|
||||
p = εμφάνιση στο κάτω μέρος του vi όλων των υποψήφιων αλλαγών
|
||||
(tips: 3, 5, 6, 7, 9, 10, 11, 12, 13, 14)
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
### [2.2 θεωρία 2]{#ss2.2}
|
||||
|
||||
Μερικοί χαρακτήρες (με χαρακτήρα):
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
& = Αν εμφανιστεί οπουδήποτε στα δεξιά μιας εντολής
|
||||
αντικατάστασης s, αντικαθίσταται από οτιδήποτε συνέπεσε στην αριστερή
|
||||
πλευρά (tips: 5, 6, 7, 10, 14)
|
||||
. = Οποιοσδήποτε χαρακτήρας (tips: 6, 7, 9, 12, 13)
|
||||
* = Οσοι (και όποιοι) χαρακτήρες (tips: 6, 7, 9, 12, 14)
|
||||
% = Ολό το αρχείο (tips: 5, 10, 11, 12, 13, 14)
|
||||
^ = Αρχή γραμμής (tips: 3, 4, 7, 8, 9, 13)
|
||||
$ = Τέλος γραμμής (tips: 4, 8)
|
||||
[...] = Οποιοσδήποτε χαρακτήρας από αυτούς που είναι εντός αγκύλης.
|
||||
Με Α-Χ εντός αγκύλης ορίζουμε όλους τους χαρακτήρες από τον Α εως τον X
|
||||
κατά ASCII σειρά (tips: 3, 11, 14)
|
||||
[^...] = Οποιοσδήποτε χαρακτήρας εκτός από αυτούς που είναι εντός αγκύλης
|
||||
\ = Escape character. Εξουδετερώνει τις "ειδικές" ιδιότητες του
|
||||
χαρακτήρα που ακολουθεί. Το vi αντιμετωπίζει δηλαδή τον επόμενο χαρακτήρα,
|
||||
ως κοινό. (tips: 6, 14)
|
||||
\{n,m\} = Δηλώνει πως οι εμφανίσεις του χαρακτήρα που προηγείται αυτής της
|
||||
έκφρασης θα κυμαίνονται από n το λιγότερο μέχρι m το περισσότερο (tips: 11)
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
### [2.3 θεωρία 3]{#ss2.3}
|
||||
|
||||
Regular Expressions
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
\(regexp\) = Ομαδοποιεί με βάση το regular expression εντός παρένθεσης.
|
||||
Οτι λοιπόν είναι μέσα στην παρένθεση θεωρείται ως ένα ενιαίο block. Μπορούμε
|
||||
πλέον να αναφερθούμε σε αυτό με βάση τον αριθμό του block αυτού. Αν είναι το
|
||||
πρώτο block που ομαδοποιήσαμε με αυτόν τον τρόπο, αναφερόμαστε σε αυτό με \1
|
||||
(tips: 9, 11, 12)
|
||||
// = κενό regular expression ισοδυναμεί με το αμέσως προηγούμενο
|
||||
regular expression (tips: 9)
|
||||
/./ = μη κενή γραμμή, τουλάχιστον 1 χαρακτήρας
|
||||
/^$/ = κενή γραμμή, μόνο χαρακτήρας αλλαγής γραμμής
|
||||
/κάτι/ = το κάτι οπουδήποτε στη γραμμή
|
||||
/^κάτι/ = το κάτι στην αρχή της γραμμής
|
||||
/κάτι$/ = το κάτι στο τέλος της γραμμής
|
||||
/κάτι.$/ = το κάτι και ένας ακόμη οποιοσδήποτε χαρακτήρας στο τέλος της
|
||||
γραμμής
|
||||
/κάτι\.$/ = το κάτι. στο τέλος της γραμμής
|
||||
/κάτι[0-9]/ = το κάτι ακολουθούμενο από ψηφίο
|
||||
/κάτι[^0-9]/ = το κάτι ακολουθούμενο από μη ψηφίο
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
Φόρτωση…
Προσθήκη πίνακα
Προσθήκη υπερσυνδέσμου
Παράθεση σε νέο ζήτημα