569 γραμμές
		
	
	
	
		
			26 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			569 γραμμές
		
	
	
	
		
			26 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
+++
 | 
						||
title = 'Οι βασικές λειτουργίες του VI'
 | 
						||
date = '1999-03-01T00:00:00Z'
 | 
						||
description = ''
 | 
						||
author = 'Ζανικόλας Σεραφείμ(mailto:serzan@it.teithe.gr)'
 | 
						||
issue = ['Magaz 22']
 | 
						||
issue_weight = 3
 | 
						||
+++
 | 
						||
 | 
						||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
 | 
						||
 | 
						||
*Αυτό το έγγραφο φιλοδοξεί να παρουσιάσει με κατανοητό και γρήγορο τρόπο τις βασικές λειτουργίες του `VI`, ενός από τους καθιερωμένους επεξεργαστές κειμένου των
 | 
						||
UNIX λειτουργικών συστημάτων.*
 | 
						||
 | 
						||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
 | 
						||
 | 
						||
**1. Σχετικά\...**
 | 
						||
---------------------------------------
 | 
						||
 | 
						||
**2. Εισαγωγή**
 | 
						||
------------------------------------
 | 
						||
 | 
						||
**3. Μετακίνηση**
 | 
						||
--------------------------------------
 | 
						||
 | 
						||
-   [3.1 Στα όρια της ενεργής γραμμής](#ss3.1)
 | 
						||
-   [3.2 Σε σχέση με την οθόνη](#ss3.2)
 | 
						||
-   [3.3 Σε όλο το κείμενο](#ss3.3)
 | 
						||
 | 
						||
**4. Επεξεργασία Κειμένου**
 | 
						||
------------------------------------------------
 | 
						||
 | 
						||
-   [4.1 Εισαγωγή](#ss4.1)
 | 
						||
-   [4.2 Διαγραφή](#ss4.2)
 | 
						||
-   [4.3 Αντικατάσταση](#ss4.3)
 | 
						||
-   [4.4 Αλλες χρήσιμες εντολές επεξεργασίας](#ss4.4)
 | 
						||
 | 
						||
**5. Αναζήτηση**
 | 
						||
-------------------------------------
 | 
						||
 | 
						||
-   [5.1 Στα όρια της ενεργής γραμμής](#ss5.1)
 | 
						||
-   [5.2 Σε όλο το κείμενο](#ss5.2)
 | 
						||
 | 
						||
**6. Διαχείρηση Αρχείων**
 | 
						||
----------------------------------------------
 | 
						||
 | 
						||
**7. Διαχείριση περιοχών μνήμης προσωρινής αποθήκευσης (buffers)**
 | 
						||
---------------------------------------------------------------------------------------
 | 
						||
 | 
						||
**8. Διάφορες εντολές**
 | 
						||
--------------------------------------------
 | 
						||
 | 
						||
**9. Παραδείγματα**
 | 
						||
----------------------------------------
 | 
						||
 | 
						||
 | 
						||
### [1. Σχετικά\...]{#s1}
 | 
						||
 | 
						||
Όπως δηλώνει σαφώς και ο τίτλος, σε καμμία περίπτωση δεν αποτελεί πλήρη οδηγό του VI. Η ομαδοποίηση των εντολών έγινε αυθαίρετα έχοντας υπ\'όψη την -όσο το
 | 
						||
δυνατόν- ευκολότερη εκμάθηση τους. Για παρατηρήσεις / προτάσεις, επικοινωνήστε στην παραπάνω διεύθυνση. Τέλος το έγγραφο θα το βρείτε στη διεύθυνση
 | 
						||
http://aetos.it.teithe.gr/\~serzan/vi/vi.html
 | 
						||
 | 
						||
 | 
						||
### [2. Εισαγωγή]{#s2}
 | 
						||
 | 
						||
**Καταστάσεις Λειτουργίας, Εντολές**
 | 
						||
 | 
						||
:   Ο `VI`(sual editor) έχει δύο βασικές καταστάσεις λειτουργίας:
 | 
						||
 | 
						||
    -   κατάσταση εντολών (command mode)
 | 
						||
    -   κατάσταση εισαγωγής κειμένου (text entry mode)
 | 
						||
 | 
						||
    Κατά τη κατάσταση εντολών οτιδήποτε πληκτρολογείτε μεταφράζεται ως εντολή. Φροντίστε να είστε προσεκτικοί γιατί δε φαίνονται οι εντολές που δίνετε, βλέπετε
 | 
						||
    μόνο τα αποτελέσματά τους. Εξαίρεση αποτελούν οι εντολές που αρχίζουν από \":\" (άνω κάτω τελεία) οι οποίες εμφανίζονται στο κάτω μέρος της οθόνης και
 | 
						||
    εκτελούνται αφού πατήσετε `<CR>` (enter). Σε κατάσταση εισαγωγής κειμένου -σχεδόν- ο,τιδήποτε πληκτρολογείτε εισάγεται στο κείμενο.
 | 
						||
 | 
						||
**Εισαγωγή - Διαγραφή**
 | 
						||
 | 
						||
:   Πατώντας `<ESC>` ή `^[` (control-\[) μπορείτε να είστε σίγουροι πως ο `VI` είναι σε κατάσταση εντολών. Βασικοί τρόποι για να περάσετε σε κατάσταση εισαγωγής
 | 
						||
    κειμένου είναι: πατώντας `i` (insert - εισαγωγή κειμένου στη θέση του δρομέα), `a` (append - εισαγωγή κειμένου στην πρώτη θέση στα δεξιά του δρομέα) ή `o`
 | 
						||
    (open(?) - εισαγωγή κειμένου σε νέα γραμμή κάτω από την ενεργή). Χρησιμοποιήστε το `x` για να διαγράψετε το χαρακτήρα στη θέση του δρομέα.
 | 
						||
 | 
						||
**Μετακίνηση**
 | 
						||
 | 
						||
:   Για να κινηθείτε μέσα στο κείμενο, αφού βεβαιωθείτε πως είστε σε κατάσταση εντολών, χρησιμοποιήστε τα `h j k l` για αριστερά, κάτω, πάνω και δεξιά.
 | 
						||
    Εναλλακτικά μπορείτε να χρησιμοποιήσετε τα βελάκια, κάτι που δε συνίσταται για λόγους ταχύτητας.
 | 
						||
 | 
						||
**Χειρισμός Αρχείων, Εξοδος**
 | 
						||
 | 
						||
:   Οσο επεξεργάζεστε ένα αρχείο στον `VI`, ουσιαστικά δουλεύετε σε ένα αντίγραφο του αρχείου σε μία προσωρινή μνήμη (buffer). Οι αλλαγές που κάνετε στην
 | 
						||
    προσωρινή μνήμη δεν αποθηκεύονται μέχρι τη στιγμή που θα δώσετε την εντολή `:w<CR>` (από το write). Εάν το αρχείο είναι read only μπορείτε να γράψετε μόνο
 | 
						||
    με `:w!<CR>`, με την προυπόθεση φυσικά πως έχετε δικαίωμα εγγραφής στο αρχείο (write permission). Γράφοντας
 | 
						||
    `:e                                   filename<CR>` μπορείτε να ανοίξετε ένα νέο αρχείο για επεξεργ ασία, ενώ τερματίζετε τον `VI` με `:q<CR>`. Εφόσον δεν
 | 
						||
    έχετε αποθηκεύσει τις αλλαγές που κάνατε ο `VI` θα διαμαρτυρηθεί και δε θα εκτελέσει την εντολή σας, σε αυτή την περίπτωση χρησιμοποιήστε `:e! filename<CR>`
 | 
						||
    και `:q!<CR>` αντίστοιχα.
 | 
						||
 | 
						||
**Αντιγραφή, Διαγραφή, Επικόλληση**
 | 
						||
 | 
						||
:   Οι εντολές `c[E]`, `y[E]` και `d[E]` (change-αλλαγή, yank-copy-αντιγραφή σε προσωρινή μνήμη, delete-διαγραφή και αντιγραφή στην προσωρινή μνήμη), επιδρούν
 | 
						||
    σε περιοχή κειμένου που προσδιορίζεται από το επίθεμά `[E]` πχ. `yw` (yank word to buffer). Η επανάληψη (`cc`, `yy`, `dd)` υποδηλώνει την επίδρασή τους στην
 | 
						||
    τρέχουσα γραμμή πχ. το `yy` αντιγράφει το περιεχόμενο της τρέχουσας γραμμής στην προσωρινή μνήμη (yank line to buffer). Επικόλληση κειμένου από την
 | 
						||
    προσωρινή μνήμη γίνεται μ ε το `p`.
 | 
						||
 | 
						||
**Η Λογική Των Εντολών**
 | 
						||
 | 
						||
:   Οι περισσότερες εντολές του `VI` μπορούν να δεχτούν ένα αριθμητικό πρόθεμα, με το οποίο δηλώνουμε πόσες φορές επιθυμούμε την εκτέλεση τους. Ετσι λοιπόν εκεί
 | 
						||
    που το `dd` θα έσβηνε την τρέχουσα γραμμή το `3dd` σβήνει 3 γραμμές.
 | 
						||
 | 
						||
    Ακολουθούν κάποια παραδείγματα. Είναι επιθυμητό ο αναγνώστης να εξοικειωθεί με όσα αναφέρθηκαν μέχρι στιγμής δεδομένου ότι οι εντολές των επόμενων κεφαλαίων
 | 
						||
    ενδέχεται να προκαλέσουν σύγχιση.
 | 
						||
 | 
						||
**Παραδείγματα**
 | 
						||
 | 
						||
:   
 | 
						||
 | 
						||
    **`14l`**
 | 
						||
 | 
						||
    :   μεταφορά του δρομέα 14 θέσεις προς τα δεξιά
 | 
						||
 | 
						||
    **`10j`**
 | 
						||
 | 
						||
    :   μεταφορά του δρομέα 10 σειρές προς τα κάτω
 | 
						||
 | 
						||
    **`10x`**
 | 
						||
 | 
						||
    :   διαγραφή 10 χαρακτήρων, ξεκινώντας από το δρομέα προς τα δεξιά
 | 
						||
 | 
						||
    **`cwtext`**
 | 
						||
 | 
						||
    :   αλλαγή λέξης με το text
 | 
						||
 | 
						||
    **`3cctext`**
 | 
						||
 | 
						||
    :   αλλαγή τριών γραμμών με το text
 | 
						||
 | 
						||
    **`7yw`**
 | 
						||
 | 
						||
    :   αντιγραφή 7 λέξεων στην προσωρινή μνήμη
 | 
						||
 | 
						||
    **`3yy`**
 | 
						||
 | 
						||
    :   αντιγραφή 3 γραμμών στην προσωρινή μνήμη
 | 
						||
 | 
						||
    **`5dw`**
 | 
						||
 | 
						||
    :   διαγραφή 5 λέξεων (και αντιγραφή στην προσωρινή μνήμη)
 | 
						||
 | 
						||
    **`2dd`**
 | 
						||
 | 
						||
    :   διαγραφή 2 γραμμών (και αντιγραφή στην προσωρινή μνήμη)
 | 
						||
 | 
						||
 | 
						||
### [3. Μετακίνηση]{#s3}
 | 
						||
 | 
						||
Οι εντολές που δέχονται αριθμητικό πρόθεμα φαίνονται με το χαρακτήρα \[N\] ενώ εκείνες που μπορούν να χρησιμοποιηθούν ως επίθεμα των εντολών `y d c` με \[E\]
 | 
						||
 | 
						||
### [3.1 Στα όρια της ενεργής γραμμής]{#ss3.1}
 | 
						||
 | 
						||
**`[N][E] w b e`**
 | 
						||
 | 
						||
:   μετακίνηση στην επόμενη λέξη, στην αρχή ή στο τέλος λέξης (οι λέξεις αποτελούνται από γράμματα και ψηφία, οτιδήποτε άλλο θεωρείται διαχωριστικό λέξης)
 | 
						||
 | 
						||
**`[N][E] W B E`**
 | 
						||
 | 
						||
:   μετακίνηση στην επόμενη λέξη, στην αρχή ή στο τέλος λέξης (οι λέξεις αποτελούντα από οποιουσδήποτε χαρακτήρες εκτός από το κενό, που έιναι διαχωριστικό
 | 
						||
    λέξης)
 | 
						||
 | 
						||
**`[E] 0`**
 | 
						||
 | 
						||
:   μεταφορά του δρομέα στην πρώτη στήλη της ενεργής γραμμής
 | 
						||
 | 
						||
**`[E] n|`**
 | 
						||
 | 
						||
:   μεταφορά του δρομέα στην νιοστή στήλη της ενεργής γραμμής ή στην πρώτη εάν δεν προσδιοριστεί το `n`
 | 
						||
 | 
						||
**`[E] $`**
 | 
						||
 | 
						||
:   μετακίνηση του δρομέα στο τέλος της ενεργής γραμμής
 | 
						||
 | 
						||
### [3.2 Σε σχέση με την οθόνη]{#ss3.2}
 | 
						||
 | 
						||
**`[E] H`**
 | 
						||
 | 
						||
:   μετακίνηση στην πρώτη γραμμή της οθόνης
 | 
						||
 | 
						||
**`[E] M`**
 | 
						||
 | 
						||
:   μετακίνηση στη γραμμή στη μέση της οθόνης
 | 
						||
 | 
						||
**`[E] L`**
 | 
						||
 | 
						||
:   μετακίνηση στην τελευταία γραμμή της οθόνης
 | 
						||
 | 
						||
**`^F`**
 | 
						||
 | 
						||
:   μετακίνηση μία οθόνη προς τα κάτω
 | 
						||
 | 
						||
**`^B`**
 | 
						||
 | 
						||
:   μετακίνηση μία οθόνη προς τα πάνω
 | 
						||
 | 
						||
### [3.3 Σε όλο το κείμενο]{#ss3.3}
 | 
						||
 | 
						||
**`[N] h j k l`**
 | 
						||
 | 
						||
:   αριστερά, κάτω, πάνω, δεξιά (εναλλακτικά χρησιμοποιήστε τα βελάκια)
 | 
						||
 | 
						||
**`[E] nG`**
 | 
						||
 | 
						||
:   μετακίνηση στη νιοστή γραμμή ή στο τέλος του αρχείου (χωρίς το `n`)
 | 
						||
 | 
						||
**`:n<CR>`**
 | 
						||
 | 
						||
:   μετακίνηση στη νιοστή γραμμή
 | 
						||
 | 
						||
**`[E] 'a`**
 | 
						||
 | 
						||
:   μετακίνηση στην πρώτη στήλη της γραμμής που σημειώθηκε ως `a`, αυτό γίνεται με την εντολή `ma` όπου `a` ένα οποιοδήποτε μικρό γράμμα του λατινικού αλφαβήτου
 | 
						||
 | 
						||
**`` [E] `a ``**
 | 
						||
 | 
						||
:   μετακίνηση στη στήλη και στη γραμμή που σημειώθηκε ως `a`, αυτό γίνεται με την εντολή `ma` όπου `a` ένα οποιοδήποτε μικρό γράμμα του λατινικού αλφαβήτου
 | 
						||
 | 
						||
 | 
						||
### [4. Επεξεργασία Κειμένου]{#s4}
 | 
						||
 | 
						||
Οι εντολές που δέχονται αριθμητικό πρόθεμα φαίνονται με το χαρακτήρα \[N\] ενώ εκείνες που μπορούν να χρησιμοποιηθούν ως επίθεμα των εντολών `y d c` με \[E\]
 | 
						||
 | 
						||
### [4.1 Εισαγωγή]{#ss4.1}
 | 
						||
 | 
						||
**`atext`**
 | 
						||
 | 
						||
:   γράφει το `text` στα δεξιά της θέσης του δρομέα (append)
 | 
						||
 | 
						||
**`A`text**
 | 
						||
 | 
						||
:   γράφει το `text` στο τέλος της ενεργής γραμμής
 | 
						||
 | 
						||
**`itext`**
 | 
						||
 | 
						||
:   γράφει το `text` στη θέση του δρομέα (insert)
 | 
						||
 | 
						||
**`Itext`**
 | 
						||
 | 
						||
:   γράφει το `text` στην αρχή της ενεργής γραμμής
 | 
						||
 | 
						||
**`otext`**
 | 
						||
 | 
						||
:   γράφει το `text` στην αρχή μιας νέας γραμμής που ανοίγει κάτω από την ενεργή (open)
 | 
						||
 | 
						||
**`Otext`**
 | 
						||
 | 
						||
:   γράφει το `text` στην αρχή μιας νέας γραμμής που ανοίγει πάνω από την ενεργή
 | 
						||
 | 
						||
### [4.2 Διαγραφή]{#ss4.2}
 | 
						||
 | 
						||
Κάθε φορά που διαγράφετε κάτι, αυτό αντιγράφετε αυτόματα στη γενικής χρήσεως προσωρινή μνήμη (buffer).
 | 
						||
 | 
						||
**`[N] x`**
 | 
						||
 | 
						||
:   διαγραφή του χαρακτήρα στον οποίο βρίσκεται ο δρομέας
 | 
						||
 | 
						||
**`[N] X`**
 | 
						||
 | 
						||
:   διαγραφή του χαρακτήρα αριστερά του δρομέα
 | 
						||
 | 
						||
**`[N] d[E]`**
 | 
						||
 | 
						||
:   διαγραφή από τη θέση του δρομέα εώς το σημείο που προσδιορίζει το `[E]`
 | 
						||
 | 
						||
**`[N] dd`**
 | 
						||
 | 
						||
:   διαγραφή τρέχουσας γραμμής
 | 
						||
 | 
						||
**`D`**
 | 
						||
 | 
						||
:   διαγραφή από τη θέση του δρομέα εώς το τέλος της γραμμής (ισοδύναμο με `d$`)
 | 
						||
 | 
						||
**`:d<CR>`**
 | 
						||
 | 
						||
:   διαγραφή τρέχουσας γραμμής (ισοδύναμο με `dd`)
 | 
						||
 | 
						||
**`:nd<CR>`**
 | 
						||
 | 
						||
:   διαγραφή νιοστής γραμμής, όπου `n` ακέραιος αριθμός που προσδιορίζει τον αριθμό γραμμής
 | 
						||
 | 
						||
**`:x,yd<CR>`**
 | 
						||
 | 
						||
:   διαγραφή από την γραμμή `x` εώς και την `y`. Όπου `x` και `y` μπορεί να είναι: α) οποιοσδήποτε αριθμός γραμμής β). (τελεία - ενεργή γραμμή) γ) \$ (τελευταία
 | 
						||
    γραμμή) δ) τα (β) ή (γ) + - αριθμητική σταθερά
 | 
						||
 | 
						||
### [4.3 Αντικατάσταση]{#ss4.3}
 | 
						||
 | 
						||
#### Στα όρια της ενεργής γραμμής
 | 
						||
 | 
						||
**`[N] c[E]text`**
 | 
						||
 | 
						||
:   αλλαγή (change) του κειμένου, από το δρομέα εώς τη θέση που προσδιορίζει το `[E]`, με το `text`
 | 
						||
 | 
						||
**`[N] cctext`**
 | 
						||
 | 
						||
:   αλλαγή ενεργής γραμμής με το `text`
 | 
						||
 | 
						||
**`Ctext`**
 | 
						||
 | 
						||
:   αλλαγή του κειμένου, από το δρομέα εώς το τέλος της γραμμής, με το `text` (ισοδύναμο με `c$text`)
 | 
						||
 | 
						||
**`:s/re1/re2/<CR>`**
 | 
						||
 | 
						||
:   αντικατάσταση (subtitute), ΜΟΝΟ της πρώτης συμβολοσειράς `re1` ή αυτής που προσδιορίζεται από την κανονική έκφραση `re1` (relative expression), που θα
 | 
						||
    βρεθεί στην ενεργή γραμμή, με τη συμβολοσειρά `re2` ή αυτήν που προσδιορίζεται από την κανονική έκφραση `re2`
 | 
						||
 | 
						||
**`:s/re1/re2/g<CR>`**
 | 
						||
 | 
						||
:   το ίδιο με τη διαφορά πως θα αντικαταστήσει ΟΛΑ τα `re1`, της ενεργής γραμμής, με το `re2` και όχι μόνο το πρώτο
 | 
						||
 | 
						||
**`:s/re1/re2/c<CR>`**
 | 
						||
 | 
						||
:   το ίδιο με τη διαφορά πως θα σας ζητήσει επιβεβαίωση για κάθε αλλαγή που θα κάνει. Οι επιλογές `g` (global) και `c` (confirm) είναι προαιρετικές και μπορούν
 | 
						||
    να χρησιμοποιηθούν και ταυτόχρονα
 | 
						||
 | 
						||
#### Σε όλο το κείμενο
 | 
						||
 | 
						||
**`:x,y s/re1/re2/<CR>`**
 | 
						||
 | 
						||
:   αντικατάσταση, ΜΟΝΟ της πρώτης συμβολοσειράς `re1` ή αυτής που προσδιορίζεται από την κανονική έκφραση `re1` (relative expression), που θα βρεθεί στις
 | 
						||
    γραμμές που προσδιορίζονται από τα `x` και `y`, με τη συμβολοσειρά `re2` ή αυτήν που προσδιορίζεται από την κανονική έκφραση `re2`. Όπου `x` και `y` μπορεί
 | 
						||
    να είναι: α) οποιοσδήποτε αριθμός γραμμής β). (τελεία - ενεργή γραμμή) γ) \$ (τελευταία γραμμή) δ) τα (β) ή (γ) + - αριθμητική σταθε ρά
 | 
						||
 | 
						||
### [4.4 Αλλες χρήσιμες εντολές επεξεργασίας]{#ss4.4}
 | 
						||
 | 
						||
**`[N] ~`**
 | 
						||
 | 
						||
:   αλλάζει το χαρακτήρα στη θέση του δρομέα, από μικρό σε κεφαλαίο ή αντίστροφα, και κινείται μία θέση δεξιά (μόνο για λατινικούς χαρακτήρες)
 | 
						||
 | 
						||
**`[N] u`**
 | 
						||
 | 
						||
:   ακυρώνει μία ή περισσότερες ενέργεις (undo)
 | 
						||
 | 
						||
**`J`**
 | 
						||
 | 
						||
:   ενώνει την ενεργή γραμμή με την επόμενη
 | 
						||
 | 
						||
 | 
						||
### [5. Αναζήτηση]{#s5}
 | 
						||
 | 
						||
Οι εντολές που δέχονται αριθμητικό πρόθεμα φαίνονται με το χαρακτήρα \[N\] ενώ εκείνες που μπορούν να χρησιμοποιηθούν ως επίθεμα των εντολών `y d c` με \[E\]
 | 
						||
 | 
						||
### [5.1 Στα όρια της ενεργής γραμμής]{#ss5.1}
 | 
						||
 | 
						||
**`[N][E] fa Fa`**
 | 
						||
 | 
						||
:   μεταφορά του δρομέα στο πρώτο `a` που θα βρεθεί στη γραμμή προς τα δεξιά (`fa`) ή προς τα αριστερά (`Fa`)
 | 
						||
 | 
						||
**`[N][E] , ;`**
 | 
						||
 | 
						||
:   επανάληψη τελευταίας αναζήτησης προς τα αριστερά (`,`) ή προς τα δεξιά (`;`)
 | 
						||
 | 
						||
### [5.2 Σε όλο το κείμενο]{#ss5.2}
 | 
						||
 | 
						||
**`/re`**
 | 
						||
 | 
						||
:   αναζήτηση, προς τα εμπρός, του `re`, όπου `re` μια οποιαδήποτε συμβολοσειρά ή κανονική έκφραση
 | 
						||
 | 
						||
**`?re`**
 | 
						||
 | 
						||
:   αναζήτηση, προς τα πίσω, του `re`, όπου `re` μια οποιαδήποτε συμβολοσειρά ή κανονική έκφραση
 | 
						||
 | 
						||
**`n`**
 | 
						||
 | 
						||
:   επανάληψη τελευταίας αναζήτησης προς τα κάτω
 | 
						||
 | 
						||
**`N`**
 | 
						||
 | 
						||
:   επανάληψη τελευταίας αναζήτησης προς τα πάνω
 | 
						||
 | 
						||
 | 
						||
### [6. Διαχείρηση Αρχείων]{#s6}
 | 
						||
 | 
						||
**`:w<CR>`**
 | 
						||
 | 
						||
:   αποθήκευση αλλαγών στο αρχικό αρχείο
 | 
						||
 | 
						||
**`:w filename<CR>`**
 | 
						||
 | 
						||
:   αποθήκευση αλλαγών στο `filename`
 | 
						||
 | 
						||
**`:wq<CR>`**
 | 
						||
 | 
						||
:   αποθήκευση αλλαγών στο αρχικό αρχείο και τερματισμός του `VI`
 | 
						||
 | 
						||
**`:e filename<CR>`**
 | 
						||
 | 
						||
:   ανοίγει το `filename` (αν δεν υπάρχει δημιουργεί ένα άδειο), θα εμφανιστεί προειδοποίηση σε περίπτωση που δεν έχουν αποθηκευτεί οι αλλαγές του αρχικού
 | 
						||
    αρχείου
 | 
						||
 | 
						||
**`:e! filename<CR>`**
 | 
						||
 | 
						||
:   ανοίγει το `filename` ανεξάρτητα από το αν έχουν αποθηκευτεί οι αλλαγές του πρώτου ή όχι
 | 
						||
 | 
						||
**`:r filename<CR>`**
 | 
						||
 | 
						||
:   προσθέτει τα περιεχόμενα του αρχείου `filename` στη θέση του δρομέα
 | 
						||
 | 
						||
**`:r <!unix_cmd><CR>`**
 | 
						||
 | 
						||
:   προσθέτει την έξοδο της εντολής `unix_cmd` στη θέση του δρομέα
 | 
						||
 | 
						||
**`:q <CR>`**
 | 
						||
 | 
						||
:   έξοδος από τον `VI`, θα εμφανιστεί προειδοποίηση σε περίπτωση που δεν έχουν αποθηκευτεί οι αλλαγές
 | 
						||
 | 
						||
**`:q! <CR>`**
 | 
						||
 | 
						||
:   έξοδος από τον `VI`, ανεξάρτητα από το αν έχουν αποθηκευτεί οι αλλαγές του αρχείου
 | 
						||
 | 
						||
 | 
						||
### [7. Διαχείριση περιοχών μνήμης προσωρινής αποθήκευσης (buffers)]{#s7}
 | 
						||
 | 
						||
Εκτός από την γενικής χρήσης ή ανώνυμη μνήμη αποθήκευσης υπάρχουν και οι επώνυμες, μία για κάθε (μικρό) γράμμα του λατινικού αλφαβήτου.
 | 
						||
 | 
						||
**`y[E]`**
 | 
						||
 | 
						||
:   αντιγραφή του κειμένου, από το δρομέα εώς το σημείο που προσδιορίζει το `[E]`, στη γενικής χρήσης μνήμη
 | 
						||
 | 
						||
**`Y`**
 | 
						||
 | 
						||
:   αντιγραφή της ενεργής γραμμής στη γενικής χρήσης μνήμη, ισοδύναμο του `yy`
 | 
						||
 | 
						||
**`"ay[E]`**
 | 
						||
 | 
						||
:   αντιγραφή του κειμένου, από το δρομέα εώς το σημείο που προσδιορίζει το `[E]`, στην επώνυμη μνήμη `a`, όπου `a` οποιοδήποτε μικρό γράμμα του λατινικού
 | 
						||
    αλφαβήτου
 | 
						||
 | 
						||
**`p P`**
 | 
						||
 | 
						||
:   επικόλληση του περιεχομένου της γενικής χρήσης προσωρινής μνήμης μετά ή πριν τη θέση του δρομέα ή την ενεργή γραμμή (ανάλογα με το αν η μνήμη έχει λέξεις ή
 | 
						||
    γραμμές)
 | 
						||
 | 
						||
**`"ap "aP`**
 | 
						||
 | 
						||
:   επικόλληση του περιεχομένου της προσωρινής μνήμης `a` μετά ή πριν τη θέση του δρομέα
 | 
						||
 | 
						||
 | 
						||
### [8. Διάφορες εντολές]{#s8}
 | 
						||
 | 
						||
**`:sh`\<CR\>**
 | 
						||
 | 
						||
:   προσωρινή έξοδος στο κέλυφος (shell), επιστροφή με `exit`
 | 
						||
 | 
						||
**`:!unix_cmd`\<CR\>**
 | 
						||
 | 
						||
:   εκτέλεση της εντολής `unix_cmd`
 | 
						||
 | 
						||
**`:cd dir_name`\<CR\>**
 | 
						||
 | 
						||
:   αλλαγή ενεργού καταλόγου στον `dir_name`
 | 
						||
 | 
						||
**`^G`**
 | 
						||
 | 
						||
:   εμφανίζει το όνομα του αρχείου, ένδειξη τροποποίησης ή όχι, αρ.γραμμής και θέση του δρομέα στο αρχείο σε ποσοστό %
 | 
						||
 | 
						||
**`^Z`**
 | 
						||
 | 
						||
:   προσωρινή διακοπή του `VI`, επιστροφή με fg
 | 
						||
 | 
						||
 | 
						||
### [9. Παραδείγματα]{#s9}
 | 
						||
 | 
						||
**`c4Wtext`**
 | 
						||
 | 
						||
:   αλλαγή των 4 επόμενων λέξεων με το `text` (όπου λέξη οποιαδήποτε σειρά χαρακτήρων δεν περιέχει το κενό)
 | 
						||
 | 
						||
**`d4wtext`**
 | 
						||
 | 
						||
:   διαγραφή των 4 επόμενων λέξεων (όπου λέξη οποιαδήποτε σειρά γραμμάτων και ψηφίων)
 | 
						||
 | 
						||
**`d0`**
 | 
						||
 | 
						||
:   διαγραφή του κειμένου από τη θέση του δρομέα εώς την αρχή της γραμμής
 | 
						||
 | 
						||
**`d$`**
 | 
						||
 | 
						||
:   διαγραφή του κειμένου από τη θέση του δρομέα εώς το τέλος της γραμμής
 | 
						||
 | 
						||
**`dN|`**
 | 
						||
 | 
						||
:   διαγραφή του κειμένου από τη θέση του δρομέα εώς τη στήλη `N`
 | 
						||
 | 
						||
**`:11d<CR>`**
 | 
						||
 | 
						||
:   διαγραφή της 11ης γραμμής
 | 
						||
 | 
						||
**`:.,.+3d<CR>`**
 | 
						||
 | 
						||
:   διαγραφή της ενεργής γραμμής και των τριών επόμενων
 | 
						||
 | 
						||
**`:.,$d<CR>`**
 | 
						||
 | 
						||
:   διαγραφή από την ενεργή γραμμή εώς το τέλος του αρχείου
 | 
						||
 | 
						||
**`4~`**
 | 
						||
 | 
						||
:   αλλαγή των κεφαλαίων γραμμάτων σε μικρών και αντίστροφα, για τους επόμενους τέσσερεις χαρακτήρες
 | 
						||
 | 
						||
**`3u`**
 | 
						||
 | 
						||
:   ακυρώνει τις τρεις τελευταίες ενέργειες (undo)
 | 
						||
 | 
						||
**`f*`**
 | 
						||
 | 
						||
:   μετακίνηση του δρομέα στο πρώτο `*`
 | 
						||
 | 
						||
**`3f*`**
 | 
						||
 | 
						||
:   μετακίνηση του δρομέα στο τρίτο `*`
 | 
						||
 | 
						||
**`y2fB`**
 | 
						||
 | 
						||
:   αντιγραφή του κειμένου από το δρομέα εώς το δεύτερο B, στη γενικής χρήσης (ανώνυμη) μνήμη
 | 
						||
 | 
						||
**`d5fa`**
 | 
						||
 | 
						||
:   διαγραφή του κειμένου από το δρομέα εώς το πέμπτο a, αντιγραφή στη γενικής χρήσης (ανώνυμη) μνήμη
 | 
						||
 | 
						||
**`c5fatext`**
 | 
						||
 | 
						||
:   αλλαγή του κειμένου από το δρομέα εώς το πέμπτο a με το `text`
 | 
						||
 | 
						||
**`:s/text1/text2/<CR>`**
 | 
						||
 | 
						||
:   αντικατάσταση του πρώτου `text1` που θα βρεθεί στην ενεργή γραμμή με το `text2`
 | 
						||
 | 
						||
**`:s/text1/text2/g<CR>`**
 | 
						||
 | 
						||
:   αντικατάσταση όλων των `text1` που θα βρεθούν στην ενεργή γραμμή με το `text2`
 | 
						||
 | 
						||
**`:s/text1/text2/gc<CR>`**
 | 
						||
 | 
						||
:   αντικατάσταση όλων των `text1` που θα βρεθούν στην ενεργή γραμμή, με το `text2`, μετά από επιβεβαίωση
 | 
						||
 | 
						||
**`:5,11 s/text1/text2/<CR>`**
 | 
						||
 | 
						||
:   αντικατάσταση του πρώτου `text1` που θα βρεθεί στις γραμμές 5 εώς και 11, με το `text2`
 | 
						||
 | 
						||
**`:.,.+3 s/text1/text2/gc<CR>`**
 | 
						||
 | 
						||
:   αντικατάσταση όλων των `text1` που θα βρεθούν στην ενεργή γραμμή και στις 3 επόμενες, με το `text2`, μετά από επιβεβαίωση
 | 
						||
 | 
						||
**`:.,$ s/text1/text2/gc<CR>`**
 | 
						||
 | 
						||
:   αντικατάσταση όλων των `text1` που θα βρεθούν από την ενεργή γραμμή εώς και το τέλος του αρχείου, με το `text2`, μετά από επιβεβαίωση
 | 
						||
 | 
						||
**`"ayf.`**
 | 
						||
 | 
						||
:   αντιγραφή του κειμένου από το δρομέα εώς την πρώτη τελεία, στην επώνυμη μνήμη `a`
 | 
						||
 | 
						||
**`"ap`**
 | 
						||
 | 
						||
:   επικόλληση του περιεχομένου της επώνυμης μνήμης `a`, στα δεξιά του δρομέα
 | 
						||
 | 
						||
**`"zy2f)`**
 | 
						||
 | 
						||
:   αντιγραφή του κειμένου από το δρομέα εώς τη δεύτερη παρένθεση, στην επώνυμη μνήμη `z`
 | 
						||
 | 
						||
**`"zP`**
 | 
						||
 | 
						||
:   επικόλληση του περιεχομένου της επώνυμης μνήμης `z`, στη θέση του δρομέα
 | 
						||
 |