Γιατί λατρεύω το Vim: Είναι τα λιγότερο γνωστά χαρακτηριστικά που το κάνουν τόσο εκπληκτικό

Από τότε που άρχισα να χρησιμοποιώ το Vim το 2016, ανακάλυψα πολλές λιγότερο γνωστές δυνατότητες που προσφέρει το Vim χωρίς κανένα πρόσθετο.

Μπορείτε να καλύψετε ορισμένα βασικά προτού αρχίσετε να συζητάτε για αυτά τα νέα πράγματα;

Α, καλά! Πριν αντιγράψω επικολλήστε μερικές εντολές από ένα cheatsheet, πρόκειται να κάνω μια τολμηρή υπόθεση: δεν θα το διαβάσατε αν θέλατε ένα cheatsheet και γνωρίζετε ήδη τα βασικά του Vim.

Ίσως μόλις ακούσατε ότι οι διανομές Linux αποστέλλονται με έναν προεπιλεγμένο επεξεργαστή κειμένου γραμμής εντολών που ονομάζεται Vim,και μπορεί να θέλετε να το δοκιμάσετε.

Ας υποθέσουμε λοιπόν ότι είστε εντελώς νέοι σε αυτό το παιχνίδι και ξεκινήστε από αυτό που χρειαζόμαστε ως βασικά (χωρίς ιστορία / βαρετή θεωρία).

ΣΗΜΕΙΩΣΗ: Εάν γνωρίζετε τα βασικά, κάντε κλικ εδώ για να τα περάσετε

Ποια είναι η προσφορά σας σε σύγκριση με τόνους άλλων άρθρων για το Vim;

Τα περισσότερα άρθρα εισαγωγής στο Vim ξεκινούν με τρόπους Vim, εισαγωγή, αποθήκευση και έξοδο. Εάν είστε πραγματικά στη διάθεση του τρόπου εκμάθησης θεωρητικής τελειότητας, μη διστάσετε να διαβάσετε ό, τι βοηθάει στα wikibooks.

Υπάρχουν επίσης μερικά υπέροχα βιβλία και άρθρα που σας λένε ότι υπάρχει μια φιλοσοφία πίσω από τον τρόπο λειτουργίας του Vim και ότι οι εντολές στο VI / Vim προορίζονται να συνδυαστούν. Απολύτως αλήθεια και είμαι βέβαιος ότι θα το εκτιμήσετε μόλις συνηθίσετε τον συντάκτη και τη δύναμη που παρέχει.

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

Λοιπόν, οι μίσος θα μισούν; Ωστόσο, σύμφωνα με εμένα, η εικόνα που δίνει κάπως μια σωστή αναπαράσταση του Vim είναι:

Η πλειοψηφία των άρθρων σχετικά με το Vim αναφέρονται στην καμπύλη μάθησης * ως μάθημα * τοίχος *, αλλά hei, υπάρχει κάποια θετικότητα: κοιτάξτε την άλλη πλευρά του τοίχου!

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

Συνδεθείτε σε οποιοδήποτε μηχάνημα (χωρίς παράθυρα) από οποιοδήποτε τερματικό και μπορείτε κυριολεκτικά να πάρετε έναν επεξεργαστή πληκτρολογώντας * vi * με τα μάτια κλειστά. Ο συντάκτης θα εμφανιστεί μπροστά σας!

Ένα άλλο πράγμα που με εντυπωσίασε είναι η ικανότητα να δουλεύω χωρίς ποντίκι και χωρίς να χάνεις παραγωγικό χρόνο στην επιφάνεια αφής ή να παίρνεις ποντίκι για φορητό υπολογιστή.

Ξέρω, ξέρω, μπορώ να ακούσω μερικούς από εσάς να φωνάζετε «Emacs! Emacs! " Το καταλαβαίνω. Αλλά όταν ήμουν δεκτός στο Vim, δεν είχα ποτέ κανένα ενδιαφέρον για τους emacs (μπορεί να οφείλεται στην απαιτούμενη εγκατάσταση). Λοιπόν, ναι emacs είναι επίσης υπέροχο υποθέτω. Μη διστάσετε να πηδήξετε πλοίο πριν ξεκινήσετε να ταξιδεύετε σε αυτό το όμορφο ταξίδι με VI (m).

Μόλις άνοιξα το τερματικό μου και πληκτρολόγησα το vi και το πλήκτρο Return Το μόνο που βλέπω είναι μια οθόνη καλωσορίσματος. Δεν μπορώ να πληκτρολογήσω και δεν ξέρω πώς να βγούμε από αυτό. Είστε βέβαιοι ότι είναι ένας ισχυρός επεξεργαστής με δυνατότητες;

100% σίγουρος. Η συμπεριφορά που μόλις είδατε είναι ο * τοίχος * που είδαμε νωρίτερα. Πιστέψτε με ότι ο VI (m) μπορεί να κάνει πολλά άλλα πράγματα. Απλώς έχει τους δικούς του τρόπους χρήσης. Μπορείτε να επεξεργαστείτε αρχεία, να ανοίξετε καρτέλες, να διαχωρίσετε την οθόνη οριζόντια ή κάθετα, να περιηγηθείτε στο σύστημα αρχείων, να εκτελέσετε εντολές linux χωρίς να φύγετε από το αρχείο σας, να δημιουργήσετε δημιουργίες από τον πηγαίο κώδικα χωρίς έξοδο από το αρχείο, καταλόγους σελιδοδεικτών, ακόμα καλύτερα: γραμμές σελιδοδεικτών ενός αρχείου, βρείτε και αντικαταστήστε λέξεις, φυσικά copy-paste και πολλά άλλα.

Ναι! Όπως είναι μεγάλη υπόθεση για έναν συντάκτη να τα υποστηρίζει. Μαχ! Όλοι το κάνουν αυτό. Ποια είναι η μεγάλη υπόθεση;

Δεν υπάρχει μεγάλη υπόθεση, η μόνη συμφωνία που βλέπω είναι η δυνατότητα εστίασης στο αρχείο / κώδικά σας χωρίς έξοδο από το πληκτρολόγιο. Πραγματικά, αν δεν σας πειράζει να χρησιμοποιήσετε ένα ποντίκι, προχωρήστε και ανοίξτε το MS word / GUI Editor και κάντε όλη την επεξεργασία που θέλετε να κάνετε.

Δίκαιο. Αλλά, σοβαρά, γιατί να μην είναι ένα IDE για κάποια δουλειά;

Εντάξει, οπότε είστε προγραμματιστής και σας άρεσε κάποιο IDE. Όχι, το VI (m) δεν αντικαθιστά το λαμπερό IDE σας. Το VI (m) δεν έχει εκπληκτικά τις δυνατότητες του IDE σας. Το VI (m) είναι πολύ μικρό σε μέγεθος (πακέτο και εγκατάσταση) σε σύγκριση με τα ογκώδη IDE και είναι διαθέσιμο για χρήση χωρίς καμία διαμόρφωση και εγκατάσταση. Σοβαρά, το VI (m) δεν ταιριάζει με μερικά υπέροχα πράγματα που παρέχει το IDE σας.

Αρκετή συζήτηση, δείξε μου τα βασικά;

Σίγουρα, πριν ξεκινήσετε, απλώς λάβετε υπόψη ότι οποιοσδήποτε χρήστης Vim πρέπει βασικά να ασχοληθεί με τη λειτουργία εντολών και τη λειτουργία εισαγωγής. Δεν υπάρχει διαφυγή (κυριολεκτικά, όχι το πλήκτρο Esc).

Ας υποθέσουμε ότι χρησιμοποιείτε κάποιο πρόγραμμα επεξεργασίας και θέλετε να διαγράψετε μια μεγάλη λειτουργία στη γλώσσα Γ. Τα απλά βήματα που κάνετε είναι: Τοποθετήστε τον κέρσορα στην αρχή της γραμμής και, στη συνέχεια, πατήστε Shift + Κάτω βέλος μέχρι το τέλος ή χρησιμοποιήστε το ποντίκι. Αυτή η ενέργεια που έπρεπε να κάνετε για να επιλέξετε αυτές τις γραμμές απαιτούσε * να σταματήσετε * την πληκτρολόγηση και να πατήσετε τα πλήκτρα. Δεν είναι; Μην μου πείτε ότι πληκτρολογείτε κάτι και πατάτε ταυτόχρονα πλήκτρα για να επιλέξετε μαγικά το σώμα της λειτουργίας σας.

Να είσαι λογικός. Παύσατε να πληκτρολογείτε και κάνατε την επιλογή για να πείτε στον συντάκτη σας ότι θέλετε να κάνετε κάτι με αυτό το κείμενο (αντίγραφο / περικοπή / Έντονη / πλάγια γραφή / οτιδήποτε).

Αυτή η παύση που κάνατε ισοδυναμεί με τη λειτουργία εντολών στο VI (m). Αυτή είναι η στιγμή που πείτε στο VI (m) ότι θέλετε να κάνετε κάποιες ενέργειες σε ορισμένες γραμμές / λέξη / οτιδήποτε και δεν πρόκειται να πληκτρολογήσετε. Τώρα, το VI (m) σας βγάζει εκτός λειτουργίας και είστε κλειδωμένοι από την πληκτρολόγηση κειμένου στο αρχείο σας. Προφανώς, ο άλλος τρόπος με τον οποίο μπορείτε πραγματικά να πληκτρολογήσετε το αρχείο σας είναι ο τρόπος εισαγωγής.

BTW, αν αναρωτιέστε πώς επιλέγετε το σώμα της λειτουργίας χωρίς να επιλέξετε κείμενο ή χρησιμοποιώντας ποντίκι, το επιτυγχάνω τοποθετώντας τον κέρσορα στα στηρίγματα ανοίγματος και χρησιμοποιώντας πλήκτρα: d%

Ναι, αυτό διαγράφει τα περιεχόμενα του σώματος λειτουργίας σας. Όχι, αυτός δεν είναι ένας ανατριχιαστικός συνδυασμός κλειδιών που πρέπει να θυμάστε! dδείχνει ότι θέλετε να διαγράψετε κάτι. %πρόκειται να μετακινήσει τον κέρσορα στο τέλος του αντίστοιχου στηρίγματος.

Τώρα, που έχουμε καθορίσει τους βασικούς τρόπους, ας βυθίσουμε στο βασικό VI (m).

Εάν γνωρίζετε το όνομα του αρχείου που γράφετε:

$ vi myfile.c

Εάν δεν είστε σίγουροι για το όνομα του αρχείου και θέλετε να ξεκινήσετε να πληκτρολογείτε:

$ vi

Μόλις ανοίξετε το vi, θα βρίσκεστε σε λειτουργία εντολών. Για είσοδο στη λειτουργία εισαγωγής, πατήστε i. Πληκτρολογήστε ό, τι θέλετε. Πατήστε Escγια επιστροφή στη λειτουργία εντολών. Τώρα έχετε μερικές επιλογές για έξοδο ανάλογα με τον τρόπο που ανοίξατε vi.

Αν έδωσε ένα όνομα αρχείου: :wθέληση ν ιεροτελεστία αυτές τις αλλαγές με ασφάλεια στο δίσκο. :qβούληση q UIT τον επεξεργαστή. Μπορείτε να συνδυάσετε αυτές τις ενέργειες με: :wqκαι Returnkey

If you did not give a filename: :wq filename.c will write the contents to the file filename.c and quit the editor. If you are not interested in the text you wrote and wish to exit without saving anything: :q! and you are out! The ! is required at the end to say : “Yes, I am sure I don’t want to save the contents and I want to get out urgently”

[DEMO] Basic vim usage

To start the vim editor: Use vim command on shell To start editing a file using vim, use : vim filenameasciinema.org

There you go! You just created, edited and saved(or may be not) your first vi file. Congratulations ?

Όπως ανέφερα νωρίτερα, αυτή δεν είναι μια εισαγωγή για αρχάριους στο VI (m). Υπάρχουν πολλά άλλα άρθρα (θα δώσω αναφορά στο τέλος του άρθρου) για να ξεκινήσετε. Μόλις εισήγαγα αυτήν την εισαγωγή, ώστε να μην είστε απογοητευμένοι μετά την προσγείωση σε αυτήν τη σελίδα και δεν βρήκατε τίποτα να μάθετε;

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

Καλώς ήλθατε στους ενδιάμεσους χρήστες. Αυτές είναι μερικές απίθανες δυνατότητες του VI (m) που δεν γνώριζα. Αλλά τώρα τα χρησιμοποιώ καθημερινά για να είμαι πιο παραγωγικός.

Για όσους από εσάς προτιμάτε TL; DR:

  • καρτέλες-σελίδες
  • συνεδρίες
  • αριθμοί γραμμής (+ σημάδια) και αντιγραφή / επικόλληση
  • διπλώνει
  • εσοχή με =
  • εισαγωγή-ολοκλήρωση
  • netrw
  • διαχωριστικά / παράθυρα
  • :! και λίγο για :make

Vim καρτέλες-σελίδες

Αναφέρατε τις καρτέλες στο Vim; Δεν ήξερα ότι υπήρχε!

I know, right! A tab page is a page with one or more windows with a label (aka tab) at the top.

If you are interested in knowing more about windows, buffers, tab pages: technical details

Have a look:

Steps:

  • Open Vim with any file or just Vim: $ vim file1
  • Type the contents of file and get into command mode (Press Esc )
  • :tabedit file2 , will open a new tab and take you to edit file2
  • :tabedit file3 , will open a new tab and take you to edit file3
  • To navigate between these tabs, you can be in normal mode and type : gt or gT to go to next tab or previous tab respectively. You can also navigate to a particular index tab (indexed from 1) using {i}gt where, i is the index of your tab. Example: 2gt takes you to 2nd tab
  • To directly move to first tab or last tab, you can enter the following in command mode: :tabfirst or :tablast for first or last tab respectively. To move back and forth : :tabn for next tab and :tabp for previous tab
  • You can list all the open tabs using : :tabs
  • To open multiple files in tabs: $ vim -p source.c source.h
  • To close a single tab: :tabclose and to close all other tabs except the current one: :tabonly . Use the suffix! to override changes of unsaved files

[DEMO] Tabs in VIM

VIM supports tabs to open multiple files and work with themasciinema.org

I think this feature enables us to effectively save time by sharing the buffer between tabs and enabling us to copy paste between tabs and keep multiple sessions of different tab set for category of work. Example: You can have a terminal tab with all Vim tabs of source code C files only and you can have another terminal tab with all Vim tabs of header files (.h).

Tabs provide so much convenience to keep all my files open and access them when I want. However, isn’t it a pain to open all tabs every time I reboot or close and open the terminal?

Right! We all like to have our own sessions of work in which we work with a set of files and would like Vim to restore that session of tabs the way we left it.

Vim allows us to save and restore those tab sessions! ✋

Steps:

  • Open any number of tabs you wish to work with
  • From any tab, press Esc and enter the command mode
  • Type :mksession header-files-work.vim and hit enter
  • Your current session of open tabs will be stored in a file header-files-work.vim
  • To see restore in action, close all tabs and Vim
  • Either start vim with your session using : $ vim -S header-files-work.vim or open vim with any other file and enter command mode to type: :source header-files-work.vim and BOOM! All your tabs are opened for you just the way you saved it!
  • If you change any session tabs (close/open new), you can save that back using : :mks! while you are in the session

[DEMO] Sessions in VIM

VIM allows users to store their work sessions separately based on the projects they are working on. Users can easily…asciinema.org

Can I copy/cut paste without having to know line numbers?

Ω ναι! Νωρίτερα έβλεπα τους αριθμούς γραμμής ( :set nu) των συναρτήσεων που ήθελα να αντιγράψω / κόψω. Ας πούμε ότι θέλω να αντιγράψω / κόψω γραμμές 34 έως 65. Χρησιμοποίησα :34,65y(Αντιγραφή / Υ ank) ή :34,65d(Cut / D elete).

Φυσικά, η μέτρηση των γραμμών και η χρήση {n}yyή {n}dd(πού nείναι ο αριθμός των γραμμών) δεν είναι επιλογή για εκατοντάδες γραμμές;

Μπορεί να υπάρχουν ορισμένες λειτουργίες που εκτείνονται σε πολλές σελίδες και δεν θέλετε να κατεβείτε μόνο για να ξεχάσετε ποιος ήταν ο αριθμός πρώτης γραμμής. Υπάρχει ένας απλός τρόπος για να το επιτύχετε αυτό χωρίς να ανησυχείτε για αριθμούς γραμμής!

Βήματα:

  • Μπείτε στην κανονική λειτουργία, μεταβείτε στη γραμμή εκκίνησης
  • Πληκτρολογήστε mk(Σημείο σημείου με αλφάβητο «k» ή χρησιμοποιήστε οποιοδήποτε άλλο αλφάβητο)
  • Μετακινηθείτε προς τα κάτω (σελίδα προς τα κάτω ή οτιδήποτε άλλο) και μετακινηθείτε στην τελική γραμμή
  • y'k will yank/copy all the lines from start to end
  • d'k will cut/delete all the lines from start to end

I have some annoying long functions at the top of my file and I don’t want to waste my time scrolling or jumping to lines. This may be a lot to ask because this is not an IDE but, by any chance can we fold the code blocks?

Absolutely! Let’s say you want to skip remembering those line numbers and walk around with your new found love *the markers*. Go to the beginning of the function body and type mb . Now, just go to the end of the function body using % (brace matching) or any other convenient technique and press zf'b and you’re done!

Before and after:

If you are comfortable using the line numbers, the command is even easier to remember: :5,16fo (fo stands for code fold). Once you have folded your code, it’s easy to toggle between open and closed views using zo (Open the code fold) and zc (Close the code fold). Don’t stress it so much. Just use za to toggle between open and closed folds ?

Let’s say you spent considerable time folding your functions in a large file, you would obviously want to retain those folds every time you open that file right? (If not, why did you waste your energy folding them!?), so there’s a solution right in your ~/.vimrc . Insert the following lines in ~/.vimrcand your code folds are saved and restored:

autocmd BufWinLeave *.* mkview autocmd BufWinEnter *.* silent loadview

I’m usually careful with my indentation but sometimes, I have to edit some other idiot’s source code and it bugs me to edit his/her code without indentation. Are there any magical keystrokes to make that happen?

Sure! It’s as simple as: =i{ . Really that’s all ! ( i is inner object)

[DEMO] Indentation in VIM

VIM allows blocks of code to be indented with a few keystrokes. All you have to do is place the cursor in a block of…asciinema.org

Before-after:

All you have to do is place the cursor anywhere within a block you want to indent, press Esc to enter normal mode and then: =i{ . Boom! Your entire function body (including inner blocks) is indented.

ΣΗΜΕΙΩΣΗ: Μην περιμένετε εσοχή των αρχείων python σας; Λειτουργεί μόνο όταν ο Vim μπορεί να αναγνωρίσει την αρχή και το τέλος χρησιμοποιώντας παρένθεση ανοίγματος και κλεισίματος)

Μπορείτε επίσης να αυξήσετε / μειώσετε την εσοχή μέσα σε ένα μπλοκ χρησιμοποιώντας >:; i {για να αυξήσετε έναnd

Ίσως ονειρεύομαι, αλλά (* φωνητική φωνή *), εννοώ ότι θέλω απλώς να το δοκιμάσω, ωμ, ίσως το πιέζω πολύ μακριά με αυτό, αλλά (* 5 δευτερόλεπτα παύση *) .. δεν πειράζει, ας προχωρήσουμε στην επόμενη ερώτησή μου

Το Vim είναι αρκετά ανοιχτόμυαλο για να πάρει κριτική ή να αντιμετωπίσει το γεγονός ότι δεν είναι IDE, προχωρήστε, ας δούμε τι έχετε.

Λυπούμαστε, αλλά κατά πάσα πιθανότητα (* λαχάνιασμα *) με οποιοδήποτε πρόσθετο ή κάτι τέτοιο, έχει η αυτόματη συμπλήρωση του vim σαν IDE;

; Μπορεί να εκπλαγείτε αλλά ναι! ; και μάντεψε τι…

* ρολά τυμπάνου *

* ρολά τυμπάνου *

* ρολά τυμπάνου *

* ρολά τυμπάνου *

Χωρίς προσθήκη!

Με ακούσατε σωστά! Η μόνη προϋπόθεση για να σας δείξει ο Vim είναι το "Vim πρέπει να ξέρει τι μιλάτε" Θα μπορούσε να είναι μέσω ενός συμπεριλαμβανόμενου αρχείου προέλευσης ή καθορισμένων συναρτήσεων ή μεταβλητών.

Το μόνο που έχετε να κάνετε είναι να ξεκινήσετε να πληκτρολογείτε και στη συνέχεια να πατήσετε Ctrl+nσε λειτουργία εισαγωγής.

Φανταστείτε τις χρήσεις! Ειδικά εάν γράφετε κώδικα C και δεν μπορείτε να θυμηθείτε την ακριβή κλήση βιβλιοθήκης OpenSSL, το μόνο που έχετε να κάνετε είναι να συμπεριλάβετε την κεφαλίδα!

[DEMO] Λειτουργία αυτόματης συμπλήρωσης στο VIM

Το VIM έχει προτάσεις αυτόματης συμπλήρωσης για λέξεις-κλειδιά, ονόματα λειτουργιών εάν περιλαμβάνονται τα κατάλληλα αρχεία κεφαλίδας ή εάν… asciinema.org

Επιτρέψτε μου να υπενθυμίσω ξανά: Δεν απαιτούνται πρόσθετα;

ΣΗΜΕΙΩΣΗ: Τα αρχεία κεφαλίδας ενδέχεται να βρίσκονται σε ορισμένες άλλες τοποθεσίες σε Mac και το Vim ενδέχεται να μην μπορεί να τα βρει. Χρησιμοποιώ απλώς ένα Mac για να συνδεθώ σε μια μηχανή Linux. Έτσι, εάν χρησιμοποιείτε Mac, λυπάμαι για αυτό.

I understand Vim is just a text editor but if you want me to work without losing focus and without exiting Vim every now and then, what options do I have if I can’t remember all the file names?

Simple, use the file explorer provided by VIM ? Yes, Vim provides a simple file explorer (*without any plugins*). Just type : :Explore from any Vim window and you will see an easy to navigate file explorer which can be navigated using ⬆️ and ⬇️ arrow keys. Press Enter/Return key to open a file/directory. Use :q to exit the explorer and vim. If you do not wish to quit vim and continue working with an open file, you have 3 options:

  1. Open the explorer in a horizontal ( :Sexplore ) or vertical ( :Vexplore ) split and exit the explorer using :q
  2. Ανοίξτε τον εξερευνητή σε άλλη καρτέλα χρησιμοποιώντας :Texploreκαι βγείτε χρησιμοποιώντας:q
  3. Ανοίξτε το πρόγραμμα περιήγησης αρχείων στο τρέχον παράθυρο και, στη συνέχεια, ξεφορτώστε το τρέχον buffer και διαγράψτε το από τη λίστα buffer χρησιμοποιώντας :bdel(buffer delete).
ΣΗΜΕΙΩΣΗ: Μπορείτε επίσης να χρησιμοποιήσετε τη σύντομη εντολή :Exγια να ανοίξετε την εξερεύνηση αρχείων

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

100% σωστά! Μιλάτε για μακροεντολές και το Vim υποστηρίζει μακροεντολές. Η επανάληψη της τελευταίας εντολής που εκτελέσατε είναι απλή και μπορεί να ολοκληρώσει απλές επαναλαμβανόμενες εργασίες. Ωστόσο, εάν η επεξεργασία κειμένου αποτελείται από πολλά βήματα για την επίτευξη ενός αποτελέσματος, οι μακροεντολές είναι χρήσιμες.

Εξετάστε ένα παράδειγμα αρχείου κεφαλίδας C:

void encrypt_text(char *text, int bytes) void decrypt_text(char *text, int bytes) void process_text(char *text, int bytes) void another_important_function(int bytes, double precision)

Oops! You forgot to put a semicolon at the end of each line and also you just realized that all these functions return an integer error code instead of void.

The steps you need to perform for making change in one line are:

  • Place the cursor at the beginning of the word void
  • Press cw in normal mode to delete the word void and type int
  • Press Esc , move to the end of line using Shift+a to insert ;
  • Press Esc and press ^ to return to the beginning of the edited line

Resulting in:

int encrypt_text(char *text, int bytes); void decrypt_text(char *text, int bytes) void process_text(char *text, int bytes) void another_important_function(int bytes, double precision)

You can just record this sequence of steps and replay it on all 4 lines.

All you have to do is, before you start the sequence, start recording the macro in any alphabet (let’s say a) by pressing qa in normal mode. Now your steps are being recorded in a . Once you are done with all your steps, just press q in normal mode. This will end the recording. To replay these steps, just keep the cursor at the same place where it was placed during macro. Press @a and we’re done! BOOM! Vim will repeat the same steps for you on that line! To repeat it on multiple lines, you can also use @@ after using @a command once

I know Vim is nowhere close to an IDE and I may be having some unreasonable hopes but just a quick question: Remote editing of files possible with Vim?

If you think of it considering the available resources:

[1] Vim

[2] openssh-client (Comes installed with most Linux flavors)

You are in luck my friend! Yes, Vim supports remote editing of files ?

Vim just utilizes the secure connection established by scp (secure copy) provided by openssh-client. There are times when you are working with files on multiple remote machines and it’s a waste of time to log into a machine just to edit one single file! You can relax in your current machine if you just know your remote machine credentials and path.

vim scp://[email protected]_IP_or_hostname/relative/path/of/file

For example: I need to edit a file on 10.0.18.12 stored in /home/dev-john/project/src/main.c and I have login credentials for dev-john, I can access the main.c using:

$ vim scp://[email protected]/project/src/main.c

I can use the relative path because, I can start looking for the file from the home directory of dev-john

TIP: If you access a remote machine frequently, you can create an ssh config file to create a shortcut for the connection. Create a file ~/.ssh/config with

Host remote-dev-machine Hostname 10.0.18.12 User dev-john IdentityFile ~/.ssh/id_rsa

Now you can access your file using:

$ vim scp://remote-dev-machine/project/src/main.c

If it’s confusing to remember the relative path and not intuitive, you can also specify it with an alternative:

$ vim scp://remote-dev-machine/~dev-john/project/src/main.c

Awesome! I’m already thrilled at the out-of-the-box capabilities of Vim. Looks like you’ve a solution to a lot of common editing problems. Let’s see. I have a file with over 2000 lines and the functions of my interest are located at line 9, line 768 and line 1898. I know I can jump to a line using line number but I’m not so good at remembering those numbers. Got anything for me?

Hell yeah! What you’re looking for is a local bookmark solution in Vim using letters. All you have to do is :

  • Place your cursor on any line at any position
  • Press Esc to make sure you’re in normal mode
  • Press m{lowercaseletter} where {lowercaseletter} is any letter from a-z
  • You just created a local bookmark to navigate in your file

To view all your bookmarks: Press Esc and enter command mode, type :marks and hit Enter/Return . You’ll see a list of your bookmarks. To visit any bookmark at any time, just press Esc and type `{lowercaseletter} . Kaboom! You’ll arrive at the exact same location with cursor where you bookmarked. Example:

I have created a local bookmark to line 21, column 18 using a . If I’m editing something on line 1783, I would just press Esc and type `a :

To solve your problem, all you’ve to do is create 3 local bookmarks and quickly jump to them by looking at :marks .

Problem solved ?

What if I told you that you can create global bookmarks too?! ? Yes, it is possible to create global bookmarks too! These are equivalent to your windows or GUI shortcuts (or linux soft/hardlinks) except you don’t need to create an actual link. You heard me right! You can literally jump from editing a file in /dir1 to another file and line in /project/src/ from your Vim without exiting ! ?

Fret not, it’s not a big new thing to remember. All you have to do is:

Use an uppercase letter instead of lower case letter to create a global bookmark. That’s all! Really! You navigate to the global bookmark using the same process. Example: If you’ve created a bookmark using mP , all you’ve to do is press Esc and type `P and BAM! You jump to your global bookmark (Vim remembers the path, so you don’t have to type anything about the path)

You can access the global bookmarks in the same way as local : :marks

:marks mark line col file/text P 53 4 ~/project/src/large-file.c A 11 0 ~/project/README.md

NOTE: If you are not interested in the cursor position and just want to be there at the beginning of you bookmarked line, use 'P instead of `P (Use a single quote instead of back tick to be positioned at the beginning of the line)

I’ve heard that Vim supports window splitting along with tabs! I understand tabs are great and you get to work with multiple open files at once. But, what about splitting? Why would I want that?

Scenarios:

  • You may want to edit a file by looking at another file simultaneously (May be you are defining a C function by looking at it’s declaration in a header file)
  • You may want to edit some portion of a file by looking at the top/bottom portion of the same file simultaneously
  • Your work may require you to edit a file by looking at different portions of different files simultaneously

Vim supports splitting of screen both horizontally and vertically. Even better, you can even browse file system to open a file when you split your screen.

Here are the available options:

:split filename - split window horizontally and load filename :vsplit file - vertical split and open file ctrl-w up arrow - move cursor up a window ctrl-w ctrl-w - move cursor to another window (cycle) ctrl-w _ - maximize current window vertically ctrl-w | - maximize current window horizontally ctrl-w = - make all equal size :sview file - same as split, but readonly :close - close current window

Maximizing a window for work:

Resizing:

CTRL-W [N] - Decrease current window height by N (default 1) CTRL-W [N] + Increase current window height by N (default 1) CTRL-W [N]  Increase current window width by N (default 1)

Is there a way to use file explorer while I split panes? (I can’t remember and type the file names always!)

Of course, all you have to do is type : :Sexplore for horizontal file explorer and :Vexplore for vertical file explorer. You can also use :Vexplore! to open the file explorer on right side (instead of default left)

Again, all this works *without any extra plugins* ?

I am in the middle of editing some code and I quickly need to run a shell command. Should I save my work, exit Vim and run my commands? I bet there is a better way out with Vim

You bet! Vim just doesn’t want you to leave Vim and wants you to continue focussing on your work. Hence the option to execute shell commands from within your Vim. Don’t worry, all your unsaved work is not discarded, you just execute your command and BAM! you are back in your unsaved/saved file safely!

Let’s say you are in the middle of a coding session and you quickly need to head out to take a look at man page of file operations because you forgot the signature! You don’t have to save your work, exit Vim and then check man pages or you don’t have to open another tab just for the man page. You can issue the command from right within the Vim editor.

[DEMO] Unix commands from VIM

VIM allows users to execute shell commands from within VIM without exiting. All you have to do is enter the command…asciinema.org

Guess what! Prepare to be amazed. Vim also supports make command from within your file! All you have to do is navigate to a directory with Makefile . Open any file (Could be your source code) and make all the changes and save it. Wait, there’s no need to exit to see the compilation result. You can trigger your make build from right within Vim:

[DEMO] Trigger make builds from vim

VIM allows users to trigger make builds without exiting VIM. All we have to do is enter the command mode and type :makeasciinema.org

Similarly you can build other targets in your Makefile!

Example: Build directory clean up

I hope these cool features will help you to use Vim more productively.

Your feedback is always welcome.

Feel free to comment, criticize or applaud ?

References:

  • //www.openvim.com/tutorial.html
  • //linuxconfig.org/vim-tutorial
  • ftp://ftp.vim.org/pub/vim/doc/book/vimbook-OPL.pdf
  • //vim.wikia.com/wiki/Tutorial
  • //www.viemu.com/a-why-vi-vim.html
  • //robertames.com/files/vim-editing.html
  • //www.youtube.com/watch?v=wlR5gYd6um0