Εδώ και ~4 μήνες χρησιμοποιώ το vim, πολύ βασικώς, όπως πχ. θα χρησιμοποιούσα και το nano. Τα μόνα keybindings που ξέρω είναι τα d, i, :w, :q
Βλέπω ότι κάνει μαγικά όμως, και λέω να εμβαθύνω. Τι θα μπορούσα να δω σε πρώτη φάση που θα με βοηθήσει να γράψω κώδικα γρηγορότερα; (πχ. html, css, php κλπ.)
Εμφάνιση 1-15 από 68
Θέμα: Το thread του Vim
-
17-08-10, 15:59 Το thread του Vim #1
-
17-08-10, 18:07 Απάντηση: Το thread του Vim #2
Μια και ανέφερες τα πλήκτρα ας δούμε τα βασικά
Κώδικας:h : Μετακίνηση του δρομέα αριστερά. j : Μετακίνηση του δρομέα κάτω. k : Μετακίνηση του δρομέα πάνω. l : Μετακίνηση του δρομέρα δεξιά.
από μακρυά με telnet σε κάποιο μηχάνημα, λόγω του χαμού που γινόταν με το
terminal emulation σε διαφορετικά λειτουργικά (βλέπε hpux,sunos,irix, κτλ) δεν
έπαιζαν τα βελάκια. Ακόμη τα πληκτρολόγια πολλών τερματικών δεν είχαν καν
βελάκια. Έτσι, με το vi σου λύνονταν τα χέρια. Παλιές ωραίες εποχές με DEC
τερματικά
Κώδικας:i : Μας βάζει στην κατάσταση εισαγωγής με τον δρομέα πριν την υπάρχουσα θέση I : Το ίδιο με i αλλά στην αρχή της γραμμής a : Μας βάζει στην κατάσταση εισαγωγής με τον δρομέα μετά την υπάρχουσα θέση A : Το ίδιο με a αλλά στο τέλος της γραμμής ο : Μας βάζει στην κατάσταση εισαγωγής αφού αλλάξει γραμμή O : Το ίδιο με o αλλά εισάγει πριν την προηγούμενη γραμμή p : Επικόλληση των περιεχομένων του buffer μετά από τον δρομέα. r : Αντικαθιστά ένα χαρακτήρα. R : Αντικαθιστά πολλούς χαρακτήρες u : undo Ctrl+R : αναίρεση του undo (redo) y : Αντιγραφή στο buffer d : Διαγραφή x : Διαγραφή χαρακτήρα μετά τον δρομέα X : Το ίδιο με x αλλά πριν τον δρομέα D : Διαγραφή από τον δρομέα μέχρι το τέλος της γραμμής G : Μετακίνηση σε κάποια γραμμή ή στο τέλος του αρχείου J : Ενώνει την γραμμή με την επόμενη . : Εκτελεί την προηγούμενη εντολή
που είμαστε το ίδιο πλήκτρο εκτελεί διαφορετική λειτουργία. Αυτά είναι τα πιο απλά
και πιο συχνά χρησιμοποιούμενα.
Πολλές εντολές δέχονται εύρος. Για παράδειγμα, αν πληκτρολογήσουμε 6x θα
σβήσει 6 χαρακτήρες. Η εντολή 5G θα μας πάει στην 5η γραμμή.
Οι εντολές y και d δέχονται και ένα όρισμα που δηλώνει την λειτουργία της εντολής.
Τα πιο συχνά χρησιμοποιούμενα είναι w (μια λέξη) $ (μέχρι το τέλος της γραμμής)
και d(μία γραμμή). Στην περίπτωση του y, αντί για το d έχουμε το y (μία γραμμή)
Έτσι, έχουμε:
Κώδικας:d$ : Διαγραφή μέχρι το τέλος της γραμμής (Ίδιο με D) 5dw : Διαγραφή 5 λέξεων yy : Αντιγραφή 1 γραμμής 3dd : Διαγραφή 3 γραμμών d3d : Διαγραφή 3 γραμμών
έχουν διαφορετική σύνταξη. Το 3dd θα εκτελέσει τρεις φορές την εντολή dd
σβήνοντας δηλαδή από μία γραμμή ενώ το d3d θα σβήσει 3 γραμμές.
Άλλες εντολές μετακίνησης που χρησιμοποιούνται συχνά και έχουν βάση
στο παρελθόν είναι:
Κώδικας:Ctrl + B : Μια σελίδα πίσω Ctrl + F : Μια σελίδα μπροστά ^ : Μετακίνηση στην αρχή της γραμμής $ : Μετακίνηση στο τέλος της γραμμής w : Μετακίνηση μια λέξη μπροστά b : Μετακίνηση μια λέξη πίσω
Εντολές εύρεσης:
Κώδικας:/ : Εύρεση προς τα κάτω του ορίσματος που θέλουμε ? : Εύρεση προς τα πάνω n : Εύρεση του επόμενου αποτελέσματος του / ή ? N : Εύρεση του επόμενου αποτελέσματος στην αντίθετη κατεύθυνση
Αν στην κατάσταση εντολών πληκτρολογήσουμε : τότε μπαίνουμε στην κατάσταση
ex. Το vi υποστηρίζει τις εντολές του παλαιότερου κειμενογράφου ex. Οι πιο συχνά
χρησιμοποιούμενες είναι οι:
Κώδικας::! = Εκτέλεση ενός εξωτερικού προγράμματος. :e = Φόρτωση ενός αρχείου :g = Εκτέλεση εντολών για επιλεγμένα patterns (γ..άει) :n = Όταν έχουμε να επεξεργαστούμε πολλά αρχεία μας φορτώνει το επόμενο :N = Ομοίως για το προηγούμενο :q = Έξοδος από το vim :q! = Αν δεν έχουμε σώσει τις αλλαγές μας, το vim γκαρίζει με το απλό q. Με το q! δηλώνουμε ότι ναι το ξέρω ότι δεν έχω σώσει. Άσε με να βγω :r = Μας εισάγει ένα αρχείο στο υπάρχον :s = Εύρεση και αντικατάσταση (επίσης γ..άει) :v = Το ίδιο με g αλλά για τις υπόλοιπες γραμμές :w = Εγγραφή του αρχείου :x = Το ίδιο με :wq (Σώσιμο + Έξοδος)
Κώδικας:Σύνταξη: [Εύρος]s/pattern για εύρεση/pattern για αντικατάσταση/[παράμετροι]
τίποτα θα ενεργήσει μόνο στην τρέχουσα γραμμή. Ο χαρακτήρας . σημαίνει την
τρέχουσα γραμμή και ο χαρακτήρας % όλο το αρχείο. Παραδείγματα
Κώδικας:5,9s : Από την 5η γραμμή μέχρι την 9η .,+5s: Από την τρέχουσα μέχρι τις επόμενες 5 γραμμές %s: Όλο το αρχείο
Κώδικας:c: Ζητά επιβεβαίωση για κάθε αλλαγή g: Αντικατάσταση όλων των pattern σε κάθε γραμμή και όχι μόνο του πρώτου i: Δεν κοιτάει κεφαλαία/πεζά
μπορεί να είναι οτιδήποτε και δεν είναι απαραίτητο να είναι /. Ας πούμε ότι θέλουμε
να αλλάξουμε σε ένα αρχείο το /usr σε /usr/local.
Κώδικας:1) :%s/\/usr/\/usr\/local/g 2) :%s#/usr#/usr/local#g
οπουδήποτε έχουμε / μέσα στο pattern μας να το κάνουμε quote χρησιμοποιώντας
την backslash, ενώ στο δεύτερο παράδειγμα επειδή χρησιμοποιούμε το # για
διαχωριστικό δεν χρειάζεται να κάνουμε τίποτα.
Ας πω τώρα και για το global. Το global (:g) μας επιτρέπει να εκτελέσουμε μια
συγκεκριμένη εντολή σε όσες γραμμές πληρούν κάποια προϋπόθεση. πχ
Κώδικας:1) :g/emacs/d 2) :g/usr/s/sbin/bin/g 3) :v/vim/d
την εντολή d. Δηλαδή θα διαγράψει όσες γραμμές έχουν την λέξη emacs επειδή
έτσι μας αρέσει
Η δεύτερη εντολή θα ψάξει για γραμμές που έχουν τη λέξη usr και θα εκτελέσει
την εντολή s η οποία θα αλλάξει το sbin με το bin. Το συγκεκριμένο παράδειγμα
είναι απλό και θα μπορούσε να γίνει και μόνο με την s.
Η τρίτη εντολή θα βρει όσες γραμμές έχουν την λέξη vim και διαγράψει τις υπόλοιπες.
Δηλαδή είναι το αντίστροφο της g
Edit: Ξέχασα να πω πριν ότι η εντολή που μπορούμε να εκτελέσουμε πρέπει να είναι
εντολή του ex. Για παράδειγμα αν θέλουμε να σβήσουμε 10 χαρακτήρες με την εντολή
10x αυτό δεν γίνεται. Αν θέλουμε να εκτελέσουμε μια εντολή του vim μπορούμε να
χρησιμοποιήσουμε το πρόθεμα normal όπως φαίνεται παρακάτω:
Κώδικας::g/vim/normal 10x
που περιέχει την λέξη vim.
Η εντολή :! μας επιτρέπει να δούμε την έξοδο κάποιας εντολής. Δηλαδή αν γράψουμε
!ls θα μας εμφανίσει τα αρχεία που υπάρχουν στον τρέχοντα κατάλογο. Εκτός
από αυτό πολλές φορές θέλουμε και να επεξεργαστούμε την έξοδο της εντολής
ή απλά να την εισάγουμε στο αρχείο μας. Αυτό μπορεί να γίνει αν συνδυάσουμε
τις εντολές :r και :! π.χ
Κώδικας::r !ls
Μπορούμε επίσης να κάνουμε και το αντίθετο. Αντί να εισάγουμε την έξοδο
μιας εντολής στο buffer μας, να στείλουμε το buffer ως είσοδο μιας εντολής.
Αυτό γίνεται με την πρόθεμα %
Κώδικας:Hello World :%!rev dlroW olleH
ως είσοδο στην εντολή rev η οποία αναποδογυρίζει την είσοδο της οπότε
το buffer μας γίνεται dlroW olleHΤελευταία επεξεργασία από το μέλος imitheos : 17-08-10 στις 23:07.
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
17-08-10, 18:12 Απάντηση: Το thread του Vim #3
Τυπωσε και αυτο για καλο και για κακο
http://wint1.kaist.ac.kr/files/attac...heat-sheet.gifديميتريس
-
17-08-10, 18:28 Απάντηση: Το thread του Vim #4
- Εγγραφή
- 20-06-2007
- Περιοχή
- Chicago, Illinois
- Ηλικία
- 32
- Μηνύματα
- 30.657
- Downloads
- 96
- Uploads
- 25
- Άρθρα
- 14
- Τύπος
- FTTH
- Ταχύτητα
- 1 Gbps
- ISP
- Nova
1. Κάνε bookmark στο post του imitheos
2. Εκτυπωσε αυτο που λεει ο jim_p
3. Τρεξε τo vimtutor (ειναι μεσα στο πακετο του vim).Dies, died, will die.
Lived, lives, will live.
-
17-08-10, 18:51 Απάντηση: Το thread του Vim #5
Ημίθεε είσαι θεός
-
17-08-10, 19:28 Απάντηση: Το thread του Vim #6
Υπάρχουν πολλές επιλογές που μπορούν να δηλωθούν στο .vimrc ή κατά
την διάρκεια του vim. Ο αριθμός τους είναι μεγάλος οπότε όπως και πριν
θα περιγράψω ποιες χρησιμοποιώ εγώ και αυτές που είναι γενικά χρήσιμες.
background (bg)
Όταν χρησιμοποιούμε το vim και όχι το gvim, μερικές φορές δεν λειτουργεί
σωστά η αυτόματη ανίχνευση του φόντου του τερματικού με συνέπεια να μην
φαίνονται καλά τα χρώματα. Για αυτό το λόγο μπορούμε να δηλώσουμε
Κώδικας:set background=dark ή set background=light
Όταν ψάξουμε κάτι, το vim το τονίζει ώστε να φαίνεται εύκολα.
Αν τελειώσουμε αυτό που θέλαμε να κάνουμε και δεν θέλουμε
να βλέπουμε τονισμένο κείμενο στα υπόλοιπα αποτελέσματα
απενεργοποιούμε αυτή την επιλογή με
Κώδικας::set nohls
list
Εμφανίζει $ στο τέλος κάθε γραμμής και ^I για κάθε tab,
έτσι μπορεί να μας διευκολύνει να διακρίνουμε τα tab όταν έχουμε κώδικα.
listchars (lcs)
Η κανονική λειτουργία του list δεν είναι και πολύ χρήσιμη. Με την listchars
μπορούμε να αλλάξουμε την λειτουργία της. Οι επιλογές που δέχεται είναι οι εξής:
Κώδικας:eol:x Θα εμφανίζει τον χαρακτήρα x στο τέλος κάθε γραμμής tab:xy Για κάθε tab θα εμφανίζει στην αρχή τον χαρακτήρα x και έπειτα τον χαρακτήρα y μέχρι να τελειώσει το tab trail:x Θα εμφανίζει τον χαρακτήρα x για όσες spaces υπάρχουν στο τέλος της γραμμής extends:x Όταν η γραμμή είναι μεγαλύτερη από ό,τι χωράει στην οθόνη θα εμφανίζει τον χαρακτήρα x για να μας δείξει ότι η γραμμή φεύγει εκτός οθόνης
Κώδικας:set listchars=eol:$,tab:>-,trail:. highlight SpecialKey ctermfg=red
Κώδικας:1) printf("foo\n"); 2)>------printf("foo\n");...$
και ότι στο τέλος μου ξέφυγαν 3 spaces που πρέπει να σβήσω από τον κώδικα.
textwidth (tw)
Αν δηλωθεί ορίζει το μέγεθος κάθε γραμμής. Αν επιχειρήσουμε να περάσουμε
το όριο αυτό θα γίνει αυτόματα wrap στην επόμενη γραμμή. Κανονικά είναι
απενεργοποιημένη γιατί έχει νόημα σε κώδικα και όχι οπουδήποτε. Για να την
ενεργοποιήσουμε σε συγκεκριμένο τύπο αρχείων μπορούμε να χρησιμοποιήσουμε
τις autocommands του vim. π.χ
Κώδικας:autocmd FileType c setlocal textwidth=78
τότε θέσε μέγιστο όριο γραμμής τους 78 χαρακτήρες. Η setlocal θέτει την παράμετρο
μόνο για το τοπικό buffer. Αν είχαμε ανοίξει πολλά αρχεία και χρησιμοποιούσαμε
την set τότε θα έθετε την tw και για εκείνα το οποίο δεν θέλουμε.
c_space_errors
Αυτή δεν είναι παράμετρος του vim αλλά του syntax highlighter της c.
Αν δηλωθεί, τότε θα εμφανίζει τις spaces που βρίσκονται στο τέλος με κόκκινο.
Πρέπει να δηλωθεί πριν φορτωθεί ο syntax highlighter π.χ
Κώδικας:let c_space_errors = 1 syntax on
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
17-08-10, 20:34 Απάντηση: Το thread του Vim #7
Wow ημίθεε
[action=gtklocker]ξεκινάει διάβασμα! [/action]
-
17-08-10, 22:10 Απάντηση: Το thread του Vim #8
Πριν επειδή δεν είχα χρόνο και επειδή θα ήταν πολλά δυσνόητα
μαζεμένα δεν ανέφερα τους registers και τα marks.
Registers
Κώδικας:The quick brown fox jumps over the lazy dog Τρεία πουλάκια κάθονταν.
αντιγράψουμε 50 γραμμές πιο κάτω το κείμενο με την αλεπού,
οπότε πηγαίνουμε τον δρομέα πάνω του και πληκτρολογούμε yy
για να αντιγραφεί η γραμμή. Τώρα μένει να πάμε το δρομέα εκεί
που θέλουμε και να πατήσουμε p για να γίνει η επικόλληση.
Βλέπουμε όμως ότι το τρία το έχουμε γράψει λάθος οπότε
πληκτρολογούμε x και σβήνουμε το έψιλον.
Αφού έχουμε μετακινηθεί 50 πιο κάτω πληκτρολογούμε p και
βλέπουμε έκπληκτοι και νευριασμένοι ότι γίνεται επικόλληση το
έψιλον που σβήσαμε.
Κάθε εντολή που πραγματοποιεί αλλαγές τις εισάγει σε κάποιο
register (κάτι σαν buffer). Οπότε με την εκτέλεση της x το
αποτέλεσμα της yy έπαψε να υπάρχει.
Εκτός από τον default register το vi μας επιτρέπει να χρησιμοποιήσουμε
26 ακόμη registers με ονόματα a-z. Για να προσπελάσουμε τον κάθε
register χρησιμοποιούμε το "
Οπότε στην παραπάνω περίπτωση μπορούμε αντί για yy να δώσουμε
"ayy οπότε το αποτέλεσμα θα μπει στον a register και δεν θα χαθεί
όταν σβήσουμε το έψιλον. Έπειτα για να γίνει η επικόλληση δίνουμε
"ap.
Marks
Στο προηγούμενο μήνυμα είπαμε ότι αν εκτελέσουμε πχ 5dd
θα σβήσουμε 5 γραμμές. Μπορεί όμως να μην ξέρουμε πόσες
ακριβώς είναι οι γραμμές και εννοείται πως δεν θα κάτσουμε
να μετράμε. Εδώ έρχονται τα marks τα οποία μας επιτρέπουν
να μαρκάρουμε μια περιοχή και να εκτελούμε εντολές πάνω της.
Τα marks είναι πάλι 26 με ονόματα a-z αλλά αυτή τη φορά
χρησιμοποιούμε το ' (μονό εισαγωγικό)
Ας υποθέσουμε ότι αυτό που μόλις έγραψα ήταν κείμενο στο vi.
Ο δρομέας είναι στο "Στο" και πληκτρολογούμε ma. Αυτό λέει
ότι μαρκάρισε την γραμμή ώς a. Έπειτα πηγαίνουμε το δρομέα
στη γραμμή "Τα marks". Αν πληκτρολογήσουμε y'a θα αντιγράψει
τις 6 αυτές γραμμές, ενώ με d'a μπορούμε να τις σβήσουμε.
Τα marks είναι χρήσιμα αλλά η Visual κατάσταση δίνει μεγαλύτερη
εποπτεία οπότε δεν πολύ χρησιμοποιούνται.
Backreferences και Patterns
Αυτό δεν είναι καθαρά vim αλλά και το sed και πολλά εργαλεία έχουν την ίδια σύνταξη.
Είναι τεράστιο κεφάλαιο αλλά επειδή ανέφερα την εντολή s πρέπει να αναφέρω
τα backreferences.
Οι πιο βασικοί μεταχαρακτήρες που ισχύουν σε patterns είναι οι ακόλουθοι.
Κώδικας:. = Οποιοσδήποτε χαρακτήρας * = Ο προηγούμενος χαρακτήρας μπορεί να υπάρχει όσες φορές θέλει ^ = αρχή της γραμμής $ = τέλος της γραμμής
Κώδικας:H.llo = Hallo, Hbllo, Hello κτλ ^Hello = Η γραμμή αρχίζει με Hello. World$ = Η γραμμή τελειώνει με World H.*o = Οποιαδήποτε λέξη αρχίζει με H και περιέχει o (Το . λέει οποιοσδήποτε χαρακτήρας και το * όσες φορές θέλει ο προηγούμενος οπότε πιάνει τα πάντα)
ένα μέρος του pattern. Δηλώνονται με τα \( και \)
Κώδικας:Ο Κώστας είναι ψηλός και ο Γιώργος είναι ψηλός
λέει ο Γιώργος είναι πολύ ψηλός. Η κλασική εντολή θα ήταν
Κώδικας:s/ψηλός/πολύ ψηλός/
Άρα τι εντολή να βάλουμε ? Εδώ θα χρησιμοποιήσουμε τα backreferences
δηλαδή τις αναφορές.
Κώδικας:s/\(Γιώργος.*\) ψηλός/\1 πολύ ψηλός/
Γιώργος, μετά ακολουθεί οτιδήποτε και τελιώνει στη λέξη ψηλός.
Οι quoted παρενθέσεις λένε ότι το κομμάτι αυτό το χρειάζομαι οπότε έχε το
υπόψην σου και θα στο ζητήσω κάποια στιγμή. Αυτό όλο θα το αντικαταστήσεις
με την φράση "\1 πολύ ψηλός", όπου \1 σημαίνει η πρώτη αναφορά που σου ζήτησα.
Δηλαδή η φράση "Γιώργος είναι ψηλός" αντικαθίσταται με την φράση
"Γιώργος είναι πολύ ψηλός"
Αυτά και τα folds είναι πάνω κάτω όσα χρησιμοποιώ στο vim. Για τα folds θα
γράψω αύριο. Ελπίζω να φανούν χρήσιμα.Τελευταία επεξεργασία από το μέλος imitheos : 17-08-10 στις 23:13.
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
18-08-10, 03:08 Απάντηση: Το thread του Vim #9
ctrl+p κάνει code completion. Επίσης για αυτούυς που γράφουν latex καλό θα ήταν να βάλουν
τα παρακάτω μέσα στο .vimrc τους:
Κώδικας:" assign keyboard commands while using the greek keyboard: map Α A map Β B map Ψ C map Δ D map Ε E map Φ F map Γ G map Η H map Ι I map Ξ J map Κ K map Λ L map Μ M map Ν N map Ο O map Π P map Q Q map Ρ R map Σ S map Τ T map Θ U map Ω V map W W map Χ X map Υ Y map Ζ Z map α a map β b map ψ c map δ d map ε e map φ f map γ g map η h map ι i map ξ j map κ k map λ l map μ m map ν n map ο o map π p map q q map ρ r map σ s map τ t map θ u map ω v map ς w map χ x map υ y map ζ z
-
18-08-10, 10:52 Απάντηση: Το thread του Vim #10
Το vim μας επιτρέπει να αποκρύπτουμε (διπλώνουμε) πληροφορίες για ευκολότερη
ανάγνωση. Αυτό χρησιμεύει σε μεγάλα κείμενα με πολλαπλές ενότητες.
foldmethod
Είναι η παράμετρος που δηλώνει την μέθοδο που θα χρησιμοποιηθεί για το δίπλωμα.
Κανονικά όταν τρέχουμε το vim είναι επιλεγμένη η manual για αυτό και δεν γίνεται
κανένα δίπλωμα. Ακόμη, υπάρχουν οι indent,syntax,expr,marker.
Η expr δέχεται ως όρισμα μια εντολή της αρεσκείας μας με βάση την οποία ορίζει
το δίπλωμα. Είναι πολύ δυνατή αλλά δεν χρησιμοποιείται πολύ συχνά.
Η indent και η syntax έχουν παρόμοια λειτουργία στις περισσότερες περιπτώσεις.
Ας δούμε για παράδειγμα τον παρακάτω κώδικα:
Spoiler:
Αν εκτελέσουμε ":set foldmethod=indent" αυτή θα διπλώσει τον κώδικα μας με
βάση τη κάθε βαθμίδα indentation. και θα προκύψει το εξής:
Spoiler:
Όπως ήταν αναμενόμενο μας έκλεισε όλες τις δηλώσεις με βάση το indentation.
Η μέθοδος αυτή λειτουργεί για οποιοδήποτε κείμενο χρησιμοποιεί indentation.
Αντίθετα η syntax χρειάζεται να έχει δηλωθεί η σύνταξη του κάθε τύπου αρχείου
για να λειτουργήσει, το vim όμως έχει ενσωματωμένες συντάξεις για πάρα πολλούς
τύπους αρχείων. Ας δούμε τώρα πόσο διαφορετική θα είναι αυτή η μέθοδος.
Spoiler:
Εδώ βλέπουμε ότι αναγνωρίζεται η σύνταξη της C και έτσι γνωρίζει ότι έχουμε
δηλώσει κάποιες συναρτήσεις για αυτό μας κρύβει όλη την συνάρτηση οπότε
οπτικά είναι καλύτερο για μεγάλους κώδικες.
foldlevel
Κακά τα ψέμματα, τα αποτελέσματα και με τις δύο μεθόδους ήταν άθλια. Δεν μπορείς
να δεις τίποτα. Σε αυτό παίζει ρόλο η παράμετρος foldlevel η οποία ορίζει από
ποια βαθμίδα και έπειτα θα γίνεται το δίπλωμα. Κανονικά έχει την τιμή 0 οπότε
διπλώνονται όλες οι δηλώσεις. Οι περισσότεροι χρήστες βρίσκουν για κώδικα
την τιμή 1 ως βέλτιστη, η οποία διπλώνει δηλώσεις από την 2η βαθμίδα και έπειτα.
Ας δούμε τι αποτέλεσμα θα έχει αυτό στις δύο προηγούμενες περιπτώσεις.
Indent
Spoiler:
Τώρα το αποτέλεσμα είναι πολύ καλύτερο. Έχουμε μια ιδέα τι κάνει η κάθε
συνάρτηση και αποκρύπτονται πχ οι λεπτομέρειες του for.
Syntax
Spoiler:
Όπως και πριν το αποτέλεσμα της syntax είναι καλύτερο οπτικά γιατί γνωρίζει
τις ιδιαιτερότητες της C.
Συνδυασμοί πλήκτρων
Κώδικας:zo = Άνοιγμα του fold στη θέση του δρομέα zO = Άνοιγμα του fold καθώς και αυτών που βρίσκονται μέσα σε αυτό zc = Κλείσιμο του fold στη θέση του δρομέα zC = Κλείσιμο του fold καθώς και αυτών που βρίσκονται μέσα σε αυτό za = Εναλλαγή της κατάστασης του fold (Άνοιγμα/Κλείσιμο) zA = Εναλλαγή της κατάστασης και αυτών που βρίσκονται μέσα zj = Μετακίνηση του δρομέα στο επόμενο fold zk = Μετακίνηση του δρομέα στο προηγούμενο fold zi = Εναλλαγή της κατάστασης foldenable με συνέπεια το άνοιγμα ή κλείσιμο όλων των folds zM = Θέτει στην foldlevel την τιμή 0 κλείνοντας ουσιαστικά όλα τα folds zR = Θέτει στην foldlevel την μέγιστη τιμή ανοίγοντας ουσιαστικά όλα τα folds zm = Μειώνει την foldlevel κατά 1 κλείνοντας μια βαθμίδα από folds zr = Αυξάνει την foldlevel κατά 1 ανοίγοντας μια βαθμίδα από folds
Ας δούμε τώρα και την τρίτη μέθοδο που είναι η marker. Εδώ επιλέγουμε ότι θέλουμε
να γίνει δίπλωμα μόνο όπου υπάρχουν οι markers {{{ και }}}. Αυτή η μέθοδος έχει
το καλό ότι επιλέγουμε εμείς να κάνουμε folding μόνο εκεί που θέλουμε να γίνει.
Δεν χρησιμοποιείται πάρα πολύ σε κώδικα αλλά συνήθως σε αρχεία που δεν έχουν
κάποια σύνταξη ή indentation.
Κώδικας:# {{{ Γεια σου κόσμε echo Hello World # }}} /* {{{ Γεια σου κόσμε */ printf("Hello World\n"); /* }}} */
μετά τον {{{ marker θα εμφανίζεται ως περιγραφή όταν το fold είναι κλειστό.
Προσωπικά εμένα, οι μέθοδοι indent και syntax δεν μου αρέσουν γιατί με δυσκολεύουν
αντί να με ευκολύνουν στην συγγραφή κώδικα. Υπάρχουν όμως περιπτώσεις που
με βολεύει η χρήση των markers όπως πχ στα αρχεία εκκίνησης του zsh.
Για παράδειγμα το αρχείο zshrc μου φαίνεται ως εξής:
Κώδικας:+-- 36 lines: Δήλωση του prompt --------------------- +-- 57 lines: Λειτουργίες πλήκτρων ------------------- +-- 64 lines: Δήλωση μεταβλητών -------------------- +-- 41 lines: Δήλωση συντομεύσεων (aliases) ---- κτλ
να ψάχνω μέσα σε 700 γραμμές. Απλά πηγαίνω στην κατηγορία
που θέλω και ανοίγω το fold.
Modelines
Καλά και χρυσά τα folds, αλλά δεν μπορούμε κάθε φορά που ανοίγουμε
ένα αρχείο να γράφουμε :set foldmethod=τάδε. Για αυτό το λόγο, το vim
υποστηρίζει τα λεγόμενα modelines που είναι γραμμές που λένε στο vim
ποιες παραμέτρους να ενεργοποιήσει για το συγκεκριμένο αρχείο.
Κώδικας:[κείμενο]<κενό>vim:παράμετροι [κείμενο]<κενό>vim:set παράμετροι: [κείμενο]
για να δηλώσουμε την modeline. Το vim ψάχνει ένα αριθμό γραμμών
στην αρχή και στο τέλος του αρχείου για πιθανά modelines, έτσι
μπορούμε να την δηλώσουμε είτε στην αρχή είτε στο τέλος του αρχείου μας.
Πιθανά παραδείγματα
Κώδικας:# vim:filetype=zsh:foldmethod=marker
αυτόματα αλλά καλό είναι να τον δηλώνουμε.
Όπως βλέπουμε στην σύνταξη, η πρώτη μορφή δεν επιτρέπει κείμενο στο τέλος,
οπότε σε συγκεκριμένες περιπτώσεις πρέπει να χρησιμοποιηθεί η δεύτερη μορφή.
Κώδικας:/* vim:filetype=c:foldmethod=syntax ΛΑΘΟΣ /* vim:set filetype=c:foldmethod=syntax */ ΣΩΣΤΟ
θέλουμε να ισχύουν για το συγκεκριμένο αρχείο μας και όχι μόνο για το folding.
Έτσι, για λόγους ασφαλείας, δεν διαβάζονται όταν ο χρήστης είναι ο root. Αν
ανοίξουμε ένα αρχείο ως root, θα πρέπει να εκτελέσουμε :set foldmethod=τάδε
ακόμη και αν υπάρχει modeline."I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
18-08-10, 10:58 Απάντηση: Το thread του Vim #11
imitheos
Αληλούια βρε αδερφέ!
-
18-08-10, 13:54 Απάντηση: Το thread του Vim #12
- Εγγραφή
- 20-06-2007
- Περιοχή
- Chicago, Illinois
- Ηλικία
- 32
- Μηνύματα
- 30.657
- Downloads
- 96
- Uploads
- 25
- Άρθρα
- 14
- Τύπος
- FTTH
- Ταχύτητα
- 1 Gbps
- ISP
- Nova
*thread bookmarked*
*bookmark done*
Dies, died, will die.
Lived, lives, will live.
-
18-08-10, 17:30 Απάντηση: Το thread του Vim #13
Ευχαριστώ για τα θετικά σχόλια.
Το vim είναι τεράστιο οπότε δύσκολο να ξέρει κανείς τα πάντα.
Αν στην πορεία θυμηθώ κάτι άλλο που χρησιμοποιώ θα το γράψω.
Για την ώρα νομίζω ότι μόνο αυτά γνωρίζω. Έχω χρησιμοποιήσει
και τα autocommands και τις παραμέτρους cin* που αλλάζουν την
συμπεριφορά του indenting αλλά είναι πολύ μεγάλα κεφάλαια και
αυτά που έχω κάνει είναι πολύ γενικά οπότε δεν έχει νόημα να τα γράψω."I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
18-08-10, 20:31 Απάντηση: Το thread του Vim #14
Θα γράψω για την καταγραφή και χρήση μακροεντολών μόλις βρω χρόνο
-
21-08-10, 18:07 Απάντηση: Το thread του Vim #15
Μπάι δε γουέι, το vimrc μου έχει τις ακόλουθες αλλαγές από το vimrc_example που
υπάρχει ως default.
Κώδικας:set nomodeline set nobackup set viminfo="NONE" set autoread set lazyredraw
σε tilde ~. Με την autoread αν το αρχείο έχει αλλάξει από το άνοιγμα του αλλά δεν
έχει γίνει κάποια αλλαγή από εμάς, τότε διαβάζει ξανά αυτόματα το αρχείο. Το
lazyredraw δεν σχεδιάζει ξανά την οθόνη κατά την εκτέλεση των macros.
Κώδικας:" if has('mouse') " set mouse=a " endif
Κώδικας:set background=dark set listchars=eol:$,tab:>-,trail:. highlight SpecialKey ctermfg=red let c_space_errors = 1
Κώδικας:syntax match TadeName "Pattern" highlight match TadeName ctermfg=tadexroma
Κώδικας:" Αν χαλάσει το match, να το κάνω stridx(s:name,'/',9) autocmd BufReadPost /var/log/* \ let s:name = expand("<afile>:p") | \ if match(s:name,'/',0,4) == -1 | \ exe "normal G" | \ endif | \ unlet! s:name
αυτόματα στο τέλος του αρχείου. Μέσα στον /var/log όμως το Slackware έχει
και άλλους καταλόγους όπως π.χ τον κατάλογο με τις πληροφορίες των πακέτων.
Εκεί δεν θέλω να με πηγαίνει στο τέλος. Παλαιότερα είχα regexp αλλά από μια
έκδοση και μετά δεν έπαιζε οπότε μετράω τις / που υπάρχουν στο όνομα.
Κώδικας:" Key Mappings set pastetoggle=<F10> nmap <silent> <F2> :set list!<cr> imap <silent> <F2> <esc>:set list!<cr>a " imap <F2> <C-O>:set list!<cr> nmap <silent> <F8> :set hls!<cr>
Το vim παρέχει την επιλογή paste για αυτό. Έτσι με το F10 αλλάζω την επιλογή.
Επίσης το F2 ενεργοποιεί/απενεργοποιεί την list ώστε να βλέπω σε κώδικα αν
έχω ξεχάσει κενά ή tabs και το F8 απενεργοποιεί την hlsearch όταν έχω βρει
αυτό που θέλω και δεν θέλω να βλέπω πλέον τα highlights.
Κώδικας:" Αλλαγή των πλήκτρων leader από το μανίσιο \ " let mapleader = ',' " let maplocalleader = ',' " Αποθήκευση αρχείου nmap <leader>w :w<cr> " Μεταφορά στο προηγούμενο/επόμενο buffer nmap <leader>n :bn<cr> nmap <leader>p :bp<cr> " Άνοιγμα νέας καρτέλας nmap <leader>to :tabnew<cr> " Κλείσιμο τρέχουσας καρτέλας nmap <leader>tc :tabclose<cr> " Μεταφορά στην προηγούμενη/επόμενη καρτέλα nmap <leader>tn :tabnext<cr> nmap <leader>tp :tabprev<cr>
συνδυασμών. Κανονικά είναι ρυθμισμένα να χρησιμοποιούν το backslash αλλά
μπορούμε να αλλάξουμε την τιμή τους. Οι καρτέλες δεν έχουν και πολύ νόημα
σε X τερματικά μια και υποστηρίζουν και αυτά καρτέλες αλλά είναι χρήσιμες στην
κονσόλα.
Κώδικας:" Κατάργηση βελακίων " Όποιος δεν χρησιμοποιεί UTF-8 να μπει στην delorean " και να γυρίσει στον 21ο αιώνα " if v:lang =~ "utf8$" || v:lang =~ "UTF-8$" if &encoding == "utf-8" nnoremap <Left> :echoerr "Το h αγκάθια έχει?"<cr> nnoremap <Down> :echoerr "Το j αγκάθια έχει?"<cr> nnoremap <Up> :echoerr "Το k αγκάθια έχει?"<cr> nnoremap <Right> :echoerr "Το l αγκάθια έχει?"<cr> nnoremap <PageUp> :echoerr "Το Ctrl-B αγκάθια έχει?"<cr> nnoremap <PageDown> :echoerr "Το Ctrl-F αγκάθια έχει?"<cr> endif
με βρίζουν αλλά δεν πειράζει . Τα απενεργοποιώ μόνο στην normal κατάσταση
γιατί στην insert και στην command δεν υπάρχουν εναλλακτικές (εκτός από macros)
Edit: Arkara δες και το langmapΤελευταία επεξεργασία από το μέλος imitheos : 21-08-10 στις 18:39.
"I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
Παρόμοια Θέματα
-
Το thread του Opensuse.
Από arkara στο φόρουμ Unix - LinuxΜηνύματα: 1964Τελευταίο Μήνυμα: 24-12-23, 14:40 -
Το thread του VirtualBox
Από WAntilles στο φόρουμ Unix - LinuxΜηνύματα: 1713Τελευταίο Μήνυμα: 22-12-20, 07:55 -
Το thread του kdenlive
Από WAntilles στο φόρουμ Unix - LinuxΜηνύματα: 17Τελευταίο Μήνυμα: 27-09-10, 23:40
Bookmarks