Vim

Ο Vim είναι επεξεργαστής κειμένου που δημιουργήθηκε από τον Bram Moolenaar το 1991, αρχικά για το λειτουργικό σύστημα της Amiga.

Είναι διαδεδομένος και αγαπητός, ιδιαίτερα ανάμεσα σε προγραμματιστές, που είναι το κοινό στο οποίο απευθύνεται κυρίως, αλλά όχι αποκλειστικά. 

 Ιστορία 

Ο Vim ξεκίνησε το 1988 με την έκδοση 1.0 (ως ακρωνύμιο του Vi IMitation), ως μια απομίμηση του παλαιότερου επεξεργαστή κειμένου Vi του γνωστού προγραμματιστή Bill Joy (συνιδρυτή της Sun Microsystems, δημιουργό του κέλυφους) για το λειτουργικό σύστημα της Commodore Amiga, η οποία ωστόσο δεν εκδόθηκε ποτέ δημοσίως.

Η πρώτη έκδοση που έγινε διαθέσιμη στο κοινό ήταν η 1.14 και πραγματοποιήθηκε στις 2 Νοεμβρίου 1991. Η διανομή της γινόταν στη δισκέτα #591 του προγραμματιστή Fred Fish, στην οποία συμπεριλαμβανόταν δωρεάν λογισμικό για το Amiga. 

Με την έκδοση 1.22 το 1992 έγινε η πρώτη μεταφορά στο λειτουργικό σύστημα Linux και αλλαγή της έννοιας του ακρωνυμίου σε Vi IMproved.

Ο Bram έχει αναφέρει αρκετές φορές ότι έμπνευσή του για την δημιουργία του Vim ήταν μια προηγούμενη απομίμηση του Vi, ονόματι Stevie, φτιαγμένος από τον Tim Thompson, αν και στην πορεία ο Vim απέκτησε δική του φιλοσοφία.

Η τελευταία σταθερή έκδοση είναι η 8.2 η οποία εκδόθηκε στις 12 Δεκεμβρίου το 2019.

 Χαρακτηριστικά 
O Vim υποστηρίζει μεταξύ άλλων:

 Συντακτική Ανάλυση και Επισήμανση
 Αυτόματη παραγραφοποίηση και ευθυγράμμιση κειμένου
 Γρήγορη επεξεργασία κειμένου μέσω μακροεντολών
 Πολύπλοκη επεξεργασία κειμένου με διαδοχικά πατήματα  κουμπιών
 Γραφή από δεξιά προς αριστερά (πχ Αραβικά, Εβραϊκά)
 Κείμενα multi-byte (Κινέζικα, Ιαπωνικά, Κορεάτικα κλπ). 
 Την επιλογή και τη χρήση κειμένου με ορθογώνια μπλοκ κειμένου.
 Συμπλήρωση εντολών.
 Αυτόματες εντολές (π.χ. αυτόματη αποσυμπίεση συμπιεσμένων αρχείων).
 Πολυγραμματική είσοδο (Είσοδος ειδικών χαρακτήρων με έναν συνδυασμό μέχρι 6 χαρακτήρων)
 Ανίχνευση και μετατροπή μεταξύ διαφορετικών μορφών κειμένου
 Προσαρμογή, δημιουργία και επέκταση λειτουργιών από τον χρήστη μέσω του Vim Script.
Εσωτερική χρήση γλώσσας Python και Perl.
Εξερεύνηση αρχείων.

 Διεπαφή 

Επειδή βασίζεται στον vi, η διεπαφή του Vim βασίζεται σε περιβάλλον επικοινωνίας τερματικούΦυσικά, εδώ εννοείται ότι πλέον, που η χρήση των τερματικών δεν είναι εκτεταμένη, ο Vim χρησιμοποιήται σε γραφικά περιβάλλοντα μέσω ενός προγράμματος απομίμησης τερματικού (terminal emulator) και δεν χρησιμοποιεί μενού ή εικονίδια για την αλληλεπίδραση με τον χρήστη.

Όλες οι εντολές που δίνονται στον Vim από τον χρήστη είναι σε αλφαριθμητική μορφή. Γενικότερα, φιλοσοφία του Vim είναι να είναι δυνατή η αποτελεσματική χρήση του μονάχα με την χρήση του πληκτρολογίου. Μάλιστα, οι συντομεύσεις του είναι δομημένες με τέτοιο τρόπο, ώστε ο χρήστης να μην απομακρύνει τα χέρια του από την σειρά βάσης του πληκτρολογίου, δηλαδή την θέση στην οποία:

 Τα ακροδάχτυλα του δεξιού χεριού είναι πάνω στα πλήκτρα "ηξκλ"
 Τα ακροδάχτυλα του αριστερού χεριού είναι πάνω στα πλήκτρα "ασδφ"

Ο Vim είναι ένας από τους λεγόμενους "modal editors" (ελεύθερη μετάφραση: Τροπικός/Λειτουργικός Επεξεργαστής), δηλαδή η χρήση του περιλαμβάνει 4 κύριες λειτουργίες, στις οποίες μπαίνει ανάλογα με τις προθέσεις του χρήστη.

 Λειτουργία Normal (Κανονική λειτουργία): Σε αυτήν το πληκτρολόγιο δεν εισάγει κείμενο αλλά τα πλήκτρα στέλνουν συντομεύσεις για την επεξεργασία του κειμένου όπως: 
 η αντιγραφή μιας γραμμής κειμένου (πλήκτρο "υ"/"y" για "yank"),
 η επικόλληση της (πλήκτρο "π"/"p" για "paste"),
 η αναστροφή αλλαγών (πλήκτρο "Θ"/"u" για undo) κτλ.
 Λειτουργία Insert (Λειτουργία Εισαγωγής): Σε αυτή ο χρήστης εισάγει κείμενο ελεύθερα.
 Λειτουργία Visual (Οπτική Λειτουργία): Σε αυτή ο χρήστης επιλέγει με διάφορες συντομεύσεις (μερικές διαφορετικές από την Κανονική Λειτουργία) ένα τμήμα κειμένου με τα πλήκτρα, ενώ το πληκτρολόγιο πάλι δεν εισάγει κείμενο στο αρχείο.
 Λειτουργία Command-line: Σε αυτή ο χρήστης δεν αλληλεπιδρά άμεσα με το κείμενο όπως προηγουμένως, αλλά εισάγει εντολές σε Vim Script στο κάτω μέρος του παραθύρου. Mε τις εντολές αυτές, επιτυγχάνονται όχι μόνο τροποποιήσεις πάνω στο κείμενο, αλλά και αλλαγές στις ρυθμίσεις του Vim, όπως, μεταξύ πολλών άλλων, η αλλαγή της χρωματικής παλέτας (color scheme) του Vim, η ύπαρξη ή όχι συντακτικής ανάλυσης στο κείμενο κτλ.

Γραφικό περιβάλλον επικοινωνίας διατίθεται συνήθως με άλλα προγράμματα που βασίζονται στον Vim, όπως ο gVim, ο οποίος χρησιμοποιεί μενού και γραμμές εργαλείων για κοινές εργασίες, ωστόσο είναι δυνατή η χρήση όλων των δυνατοτήτων μέσω πληκτρολόγησης εντολών.

Ο Vim διαθέτει επίσης εγχειρίδιο για αρχάριους, καθώς και ενσωματωμένη βοήθεια σχετικά με εντολές και δυνατότητες, η οποία μπορεί να διαβαστεί είτε μέσα από τον Vim (αν έχουν εγκατασταθεί τα αρχεία βοήθειας) είτε μέσω διαδικτύου. Επιπλέον, πολλά βιβλία έχουν γραφτεί για την εκμάθηση της χρήσης του Vim και του Vim Script.

 Vimscript 
Ο Vim είναι βασισμένος στην γλώσσα σεναρίων (scripting language) Vim Script, που ήταν επίσης βασισμένη στην γλώσσα σεναρίων Ex, του Vi, γεγονός που είναι εμφανές από την παρόμοια σύνταξή τους.

Όλες οι ρυθμίσεις είναι γραμμένες σε Vim Script, δηλαδή σε αρχεία απλού κειμένου, συχνά με την επέκταση .vim, τα οποία μπορεί ο χρήστης να τροποποιήσει με όποιον τρόπο θέλει, επεκτείνοντας έτσι τον Vim χωρίς να περιορίζεται από τις προκαθορισμένες του ρυθμίσεις. Στην ιστοσελίδα του Vim υπάρχει και τμήμα στο οποίο εγγραμμένοι χρήστες του μπορούν να μοιραστούν σενάρια (scripts) που έχουν γράψει με την υπόλοιπη κοινότητα.  

Κομμάτι κώδικα από το προεπιλεγμένο σενάριο εκκίνησης του Vim (αρχείο ".vimrc"):  " Don't use Ex mode, use Q for formatting.
" Revert with ":unmap Q".
map Q gq

" CTRL-U in insert mode deletes a lot.  Use CTRL-G u to first break undo,
" so that you can undo CTRL-U after inserting a line break.
" Revert with ":iunmap <C-U>".
inoremap <C-U> <C-G>u<C-U>

" In many terminal emulators the mouse works just fine.  By enabling it you
" can position the cursor, Visually select and scroll with the mouse.
" Only xterm can grab the mouse events when using the shift key, for other
" terminals use ":", select text and press Esc.
if has('mouse')
  if &term =~ 'xterm'
    set mouse=a
  else
    set mouse=nvi
  endif
endif

 Αναλυτικά η Ιστορία Εκδόσεων 
Η ιστορία του Vim όσων αναφορά τα βασικότερα χαρακτηριστικά που προστέθηκαν σε αυτόν μετά την μεταφορά στο Unix είναι:
+Ιστορία του Vim αναλυτικάΑριθμός ΈκδοσηςΗμερομηνία ΚοινοποίησηςΣημαντικά προστιθέμενα χαρακτηριστικά1.0Πριν τον Νοέμβριο του 1991 (Μη διαθέσιμο στο κοινό) Αλλαγή της σημασίας του "VIM" σε Vi IMproved.
 Μεταφορά της βοήθειας σε αρχείο.
 Αρχεία σεναρίου
 Έξυπνη παραγραφοποίηση 1.142 Νοεμβρίου 1991Πρώτη έκδοση διαθέσιμη στο κοινό, βελτιστοποίηση του κώδικα.1.22Πριν τον Ιανουάριο του 1992Πρώτη μεταφορά στο λειτουργικό σύστημα Linux.2.021 Δεκεμβρίου 1993 Η οριζόντια κύλιση
 Η εμφάνιση λέξεων σε πολλές γραμμές εάν δεν χωράνε οι χαρακτήρες στο παράθυρο (word wrapping ή απλά "wrap" στο Vim)3.016 Αυγούστου 1994Η δυνατότητα για ύπαρξη πολλαπλών buffer (ρυθμιστές) και παραθύρων.4.021 Μαΐου 1996Το γραφικό περιβάλλον, γνωστό και ως gVim (διατίθεται συνήθως ως διαφορετικό πρόγραμμα), με την βοήθεια του Robert Webb.5.019 Φεβρουαρίου 1998Ο συντακτικός έλεγχος και επισήμανση.
 Η εσωτερικευμένη πλέον γλώσσα σεναρίων.
 Η υποστήριξη των γλωσσών Python και Perl.6.027 Σεπτεμβρίου 2001Η αναδίπλωση κώδικα.
 Οι επεκτάσεις (plugins).
 Η δυνατότητα κάθετης διάσπασης της επιφάνειας εργασίας του Vim σε δύο ή παραπάνω υποπαράθυρα.
 Ο εξερευνητής αρχείων του Vim.
 Η υποστήριξη πολλαπλών γλωσσών.
 Η υποστήριξη παλετών χρώματος (color schemes) για το περιβάλλον του Vim.
 Η δυνατότητα ορισμού διαφορετικών ρυθμίσεων ανάλογα με τον τύπο αρχείου που τροποποιείται.
 Η δυνατότητα ρύθμισης αυτόματης δημιουργίας και χειρισμού αντιγράφων ασφαλείας των τροποποιούμενων αρχείων (για να αποφεύγονται προβλήματα κατά λάθος αντικατάστασης πληροφοριών).
 Η λειτουργία Diff, η οποία επιτρέπει τον εύκολο εντοπισμό διαφορών μεταξύ δύο ή περισσότερων αρχείων.
 Το πρόγραμμα eVim, το οποίο επιτρέπει την χρήση του Vim σαν ένα πρόγραμμα απλού σημειωματάριου (notepad) μέσω κάποιων αλλαγών όπως η χρήση μονάχα μίας λειτουργίας, της Insert, η υποστήριξη της χρήσης του ποντικιού, η αντιγραφή με την "κλασική" συντόμευση CTRL-C.
 Αυτόματη παραγραφοποίηση με οποιαδήποτε γλώσσα προγραμματισμού.
 Η τροποποίηση αρχείων μέσω δικτύου (χρήση ftp, scp, rcp, http).
 Παράθυρο για την χρήση γραμμής εντολών μέσα στον Vim.
 Η λειτουργία Debugging που επιτρέπει την αναγνώριση σφαλμάτων στον ίδιο τον Vim και τα αρχεία ρυθμίσεών του.7.08 Μαΐου 2006Ο ορθογραφικός έλεγχος.
 Η δυνατότητα δημιουργίας διαφορετικών καρτελών (tabs).
 Η επέκταση του μηχανισμού αναίρεσης από γραμμική μορφή σε μορφή δέντρου.
 Η επέκταση της διγραμματικής εισόδου σε πολυγραμματικής μέχρι 6 χαρακτήρες.
 Η επισήμανση ζευγαριών παρενθέσεων, αγκυλών κτλ.
 Η εντολή :vimgrepπου επιτρέπει την αναζήτηση μιας λέξης σε μια λίστα αρχείων, χωρίς την χρήση εξωτερικού προγράμματος (χρησιμοποιούνταν το πρόγραμμα grep).
 Η δυνατότητα ορισμού ενός τελεστή από τον χρήστη.
 Η δυνατότητα δυναμικού ορισμού ενός χαρακτήρα στο αποτέλεσμα μιας έκφρασης.8.012 Σεπτεμβρίου 2019 Η δυνατότητα για ασύγχρονη έξοδο και είσοδο μηνυμάτων με άλλες εφαρμογές.
 Η δυνατότητα για την δημιουργία και επικοινωνία με μια διεργασία.
 Η δημιουργία της διαχείρισης των πακέτων από τον ίδιο τον Vim, κάνοντας πολύ πιο απλή την διαδικασία των πρόσθετων (plugins).
 Περισσότεροι τρόποι για διαγνωστικά τεστ (αφορά προγραμματιστές του Vim).
 Ο ορισμός ταυτότητας παραθύρου για κάθε υποπαράθυρο του Vim (Μέχρι τώρα μια αναφορά σε υποπαράθυρο γινόταν μονάχα με το νούμερο του).
 Υποστήριξη DirectX σε Windows.
 Υποστήριξη GTK 3 (για gVim).

 Παραπομπές 

 Εξωτερικοί σύνδεσμοι 

 Κύρια σελίδα του Vim
 Σελίδα της Φιλανθρωπικής οργάνωσης ICCF-Holland 

Κατηγορία:Επεξεργαστές κειμένου
Κατηγορία:Επεξεργαστές πηγαίου κώδικα
Κατηγορία:Ελεύθερο λογισμικό
Κατηγορία:Λογισμικό Unix