Miksi rakastan Vimiä: Vähemmän tunnetut ominaisuudet tekevät siitä niin hämmästyttävän

Siitä lähtien, kun aloitin Vimin käytön vuonna 2016, olen löytänyt useita vähemmän tunnettuja ominaisuuksia, joita Vim tarjoaa laatikosta ilman lisäosia.

Pystytkö käsittelemään joitain perusteita, ennen kuin alat kävelemään näistä uusista asioista?

Voi varma! Ennen kuin kopioin muutaman komennon cheatsheetistä, aion tehdä rohkean oletuksen: et lukisi tätä, jos halusit cheatsheetin ja tiesit jo Vim-perusteet.

Olet ehkä juuri kuullut, että Linux-jakeluissa on oletusarvoinen komentorivin tekstieditori nimeltä Vim,ja saatat haluta vain kokeilla sitä.

Oletetaan, että olet täysin uusi tässä pelissä ja aloitat juuri siitä, mitä tarvitsemme perusasioina (ilman historiaa / tylsiä teoriaa).

HUOMAUTUS: Jos tiedät perusasiat, vieritä niitä napsauttamalla tätä

Mikä on sinun sopimuksesi verrattuna muihin tonneihin muihin Vim-artikkeleihin?

Suurin osa Vim-introartikkeleista alkaa Vim-tiloista, lisäyksistä, tallentamisesta ja poistumisesta. Jos olet todella teoreettisen täydellisyyden oppimistavan tuulella, voit lukea mitä tahansa wikikirjoista.

On myös joitain hienoja kirjoja ja artikkeleita, jotka kertovat sinulle, että Vim-työskentelyn takana on filosofia ja että VI / Vim-komennot on tarkoitus yhdistää. Ehdottomasti totta ja olen varma, että arvostat sitä, kun totut editoriin ja sen tarjoamaan voimaan.

Olen kuullut hauskoja tarinoita ja nähnyt hauskoja kuvia Vimin oppimiskäyrästä. Onko se totta? Onko se todella niin paha?

No, vihaajat vihaavat? Minun mielestäni kuva, joka antaa jonkin verran oikean kuvan Vimistä, on:

Suurin osa Vim-artikkeleista viittaa oppimisen * käyrään * oppimisen * seinään *, mutta hei, on positiivisuutta: katso seinän toista puolta!

Aloittelijoille se on kirjaimellisesti seinä, koska he eivät ole koskaan ennen tehneet mitään vastaavaa käyttääksesi editoria komentorivillä. Asia, joka houkutteli minua eniten aloittelijana, oli Vimin läsnäolo.

Kirjaudu mihin tahansa (ei Windows-koneeseen) koneeseen miltä tahansa päätelaitteelta ja saat kirjaimellisesti editorin kirjoittamalla * vi * silmät kiinni. Toimittaja ilmestyy edessäsi!

Toinen miellyttävä asia on kyky työskennellä ilman hiirtä ja tuhlaamatta tuottavaa aikaa kosketuslevylle tai hiiren hankkiminen kannettavaan tietokoneeseen.

Tiedän, tiedän, kuulen joidenkin teistä huutavan “Emacs! Emacs! " Ymmärsin. Mutta kun olin kiinnittynyt Vimiin, minulla ei koskaan ollut oikeastaan ​​mitään kiinnostusta emacsiin (saattaa johtua vaaditusta asennuksesta). Joten, kyllä, emacs on myös hieno. Voit vapaasti hypätä alukseen, ennen kuin alat purjehtia tällä kauniilla matkalla VI: n (m) kanssa.

Avasin juuri päätelaitteeni ja kirjoitin vi ja osui palautusnäppäintä. Näen vain tervetulonäytön. En osaa kirjoittaa ja en tiedä miten päästä siitä pois. Oletko varma, että se on tehokas editori, jolla on ominaisuuksia?

100% varma. Käyttäytyminen, jonka olet juuri nähnyt, on * muuri *, jonka näimme aiemmin. Luota minuun VI (m) voi tehdä paljon muuta. Sillä on vain omat tapansa käyttää sitä. Voit muokata tiedostoja, avata välilehtiä, jakaa näytön vaaka- tai pystysuunnassa, selata tiedostojärjestelmää, suorittaa Linux-komentoja poistumatta tiedostostasi, käynnistää rakenteiden muodostamisen lähdekoodistasi poistumatta tiedostosta, kirjanmerkkihakemistot, vielä parempi: tiedoston kirjanmerkkirivit, löytää ja korvata sanoja, tietysti copy-paste ja paljon muuta.

Joo! Kuten se on iso juttu toimittajalle tukea niitä. Meh! Kaikki tekevät niin. Mikä on iso juttu?

Ei ole mitään suurta ongelmaa, ainoa näen on mahdollisuus keskittyä tiedostoon / koodiin poistumatta näppäimistöstä. Oikeasti, jos et haittaa hiiren käyttöä, siirry eteenpäin ja avaa MS word / GUI Editor ja tee kaikki haluamasi muokkaukset.

Ymmärrän kyllä. Mutta vakavasti, miksi ei IDE joihinkin töihin?

Okei, joten olet kehittäjä ja sinulla on ollut jonkin verran mieltymyksiä / rakkautta IDE: hen. Ei, VI (m) ei korvaa kiiltävää IDE: täsi. VI (m): llä ei ole IDE: n mahtavia ominaisuuksia. VI (m) on kooltaan vain pieni (paketti ja asennus) verrattuna suuriin IDE-laitteisiin ja se on käytettävissä käytettäväksi ilman kokoonpanoa ja asennuksia. Vakavasti, VI (m) ei sovi upeisiin asioihin, joita IDE tarjoaa.

Tarpeeksi puhetta, näytätkö perusasiat?

Toki, ennen kuin aloitat, muista vain, että kaikkien Vim-käyttäjien on periaatteessa käsiteltävä komentotilaa ja lisäystilaa. Ei ole paeta (kirjaimellisesti, ei Esc-näppäintä).

Oletetaan, että käytät jotakin editoria ja haluat poistaa pitkän funktion C-kielellä. Yksinkertaiset tekemäsi vaiheet ovat: Aseta kohdistin rivin alkuun ja paina sitten Vaihto + alanuoli loppuun asti tai käytä hiirtä. Tämä toiminto, joka sinun oli tehtävä näiden rivien valitsemiseksi, vaati sinua * lopettamaan * kirjoittamisen ja painamalla näppäimiä. Eikö olekin? Älä sano, että kirjoitit jotain ja painoit samanaikaisesti näppäimiä maagisesti valitsemaan toiminnosi rungon.

Ole järkevä. Keskeytit kirjoittamisen ja teit valintatyön kertoaksesi muokkaajalle, että haluat tehdä jotain tällä tekstillä (kopioi / leikkaa / lihavoitu / kursiivi / mikä tahansa).

Tämä tekemäsi tauko vastaa komentotilassa olemista tilassa VI (m). Tämä on aika, jolloin sanot VI (m): lle, että haluat tehdä joitain toimintoja joillekin riveille / sanalle / muulle, etkä aio kirjoittaa. Nyt VI (m) heittää sinut pois lisäystilasta ja olet lukittu kirjoittamasta tekstiä tiedostoon. Ilmeisesti toinen tila, johon voit itse kirjoittaa tiedostosi, on lisäystila.

BTW, jos mietit, kuinka valitset toiminnon rungon valitsematta tekstiä tai hiirtä, suoritan sen asettamalla kursorin avautuviin aaltosulkeisiin ja käyttämällä näppäinpainalluksia: d%

Kyllä, se poistaa toimintorungosi sisällön. Ei, se ei ole jokin kammottava näppäinyhdistelmä muistaa! dilmaisee, että haluat poistaa jotain. %siirtää kohdistimen vastaavan aaltosuunnan loppuun.

Nyt, kun olemme perustaneet perustilat, sukelkaamme perus VI: een (m).

Jos tiedät kirjoittamasi tiedoston nimen:

$ vi myfile.c

Jos et ole varma tiedostonimestä ja haluat aloittaa kirjoittamisen:

$ vi

Heti kun avaat vi, olet komentotilassa. Syöttää i nsert painamalla i. Kirjoita mitä haluat. Paina Escpalataksesi komentotilaan. Nyt sinulla on muutama mahdollisuus poistua sen mukaan, kuinka avasit vi.

Jos annoit tiedostonimi: :wtahto w riitti nuo muutokset turvallisesti levylle. q:q avaa editorin. Voit yhdistää nämä toiminnot: ja -näppäimen kanssa:wqReturn

Jos et anna tiedostonimi: :wq filename.ctahtoa w riitti sisältö tiedostoon filename.cja Q uit editorin. Jos et ole kiinnostunut kirjoittamastasi tekstistä ja haluat poistua tallentamatta mitään: :q!ja olet poissa! !Tarvitaan lopussa sanoa: ”Kyllä, olen varma en halua tallentaa sisällön ja haluan päästä pois nopeasti”

[DEMO] Perustoiminnot

Vim-muokkaimen käynnistäminen: Käytä komentoa shellissä vim-komennolla Voit aloittaa tiedoston muokkaamisen vim-sovelluksella seuraavasti: vim-tiedostonimi asciinema.org

Ole hyvä! Olet juuri luonut, muokannut ja tallentanut (tai et ehkä ole) ensimmäisen vi-tiedostosi. Onnittelut ?

Kuten aiemmin mainitsin, tämä ei ole aloittelijan johdanto kohtaan VI (m). Aloittamiseen on paljon muita artikkeleita (annan viitteen artikkelin lopussa). Lisäsin juuri tämän johdannon, jotta et ole pettynyt laskeuduttuasi tälle sivulle etkä löydä mitään opittavaa?

Tämä on rivi, jossa aloittelijat jättävät hyvästit välikäyttäjille ja siirtyvät viiteosioon, jossa on loistavia introartikkeleita.

Tervetuloa välikäyttäjille. Nämä ovat joitain VI: n (m) hienoja ominaisuuksia, joista en ollut tietoinen. Mutta nyt käytän niitä päivittäin tuottavuuden parantamiseksi.

Niille teistä, jotka haluavat TL; DR:

  • välilehti-sivut
  • istuntoja
  • rivinumero (+ merkit) ja kopioi / liitä
  • taittuu
  • sisennys =
  • lisää-loppuun
  • netrw
  • halkaisee / ikkunat
  • :! ja vähän siitä :make

Vim-välilehti

Mainitsitko välilehdet Vimissä? En tiennyt, että sitä oli olemassa!

Tiedän, oikein! Välilehtisivu on sivu, jossa on yksi tai useampi ikkuna, jonka yläosassa on tarra (alias-välilehti).

Jos haluat tietää enemmän ikkunoista, puskureista, välilehtien sivuista: tekniset tiedot

Katso:

Askeleet:

  • Avaa Vim millä tahansa tiedostolla tai vain Vim: $ vim file1
  • Kirjoita tiedoston sisältö ja siirry komentotilaan (paina Esc)
  • :tabedit file2 , avaa uuden välilehden ja vie sinut muokkaamaan file2
  • :tabedit file3 , avaa uuden välilehden ja vie sinut muokkaamaan file3
  • Voit siirtyä näiden välilehtien välillä valitsemalla normaalitilan ja kirjoittamalla: gttai gTsiirtyäksesi seuraavaan tai edelliseen välilehteen. Voit myös siirtyä tietylle hakemistovälilehdelle (indeksoitu yhdestä) käyttämällä {i}gtmissä, i on välilehden hakemisto. Esimerkki: 2gtvie sinut toiseen välilehteen
  • Voit siirtyä suoraan ensimmäiselle tai viimeiselle välilehdelle kirjoittamalla komentotilassa seuraavat: :tabfirsttai :tablastvastaavasti ensimmäiselle tai viimeiselle välilehdelle. Siirtyminen edestakaisin: :tabnseuraavaa ja :tabpedellistä välilehteä varten
  • Voit luetella kaikki avoimet välilehdet seuraavilla tavoilla: :tabs
  • Useiden tiedostojen avaaminen välilehdillä: $ vim -p source.c source.h
  • Sulkea yhden välilehden: :tabcloseja sulkea kaikki muut välilehdet paitsi nykyisen: :tabonly. Käytä loppuliitettä !ohittamaan tallentamattomien tiedostojen muutokset

[DEMO] -välilehdet VIM: ssä

VIM tukee välilehtiä useiden tiedostojen avaamiseen ja työskentelyyn niiden kanssa asciinema.org

Mielestäni tämän ominaisuuden avulla voimme säästää aikaa tehokkaasti jakamalla puskurin välilehtien välillä ja avulla voimme kopioida liittämisen välilehtien välillä ja pitää useita eri välilehtien istuntoja asetettuna työluokalle. Esimerkki: Sinulla voi olla päätelaite, jossa on vain kaikki lähdekoodin C-tiedostojen Vim-välilehdet, ja sinulla voi olla toinen pääte-välilehti, jossa on kaikki otsikkotiedostojen Vim-välilehdet (.h).

Välilehdet tarjoavat niin paljon mukavuutta pitää kaikki tiedostoni auki ja käyttää niitä milloin haluan. Eikö ole kuitenkin tuskaa avata kaikkia välilehtiä aina, kun käynnistän uudelleen tai suljen ja avaan päätelaitteen?

Aivan! Me kaikki haluamme pitää omat työistunnot, joissa työskentelemme joukon tiedostoja ja haluaisimme Vimin palauttavan kyseisen välilehtien istunnon samalla tavalla kuin jätimme sen.

Vim antaa meille mahdollisuuden tallentaa ja palauttaa välilehtiistunnot! ✋

Askeleet:

  • Avaa mikä tahansa määrä välilehtiä, joiden kanssa haluat työskennellä
  • Paina millä tahansa välilehdellä Escja siirry komentotilaan
  • Kirjoita :mksession header-files-work.vimja paina Enter
  • Nykyinen avoinna olevien välilehtien istunto tallennetaan tiedostoon header-files-work.vim
  • Jos haluat nähdä palautuksen toiminnassa, sulje kaikki välilehdet ja Vim
  • Joko käynnistä vim istunnollasi käyttämällä: $ vim -S header-files-work.vimtai avaa vim millä tahansa muulla tiedostolla ja siirry komentotilaan kirjoittamaan: :source header-files-work.vimja BOOM! Kaikki välilehdet avataan sinulle juuri siten kuin tallennit!
  • Jos vaihdat istuntovälilehtiä (sulje / avaa uusi), voit tallentaa sen takaisin: :mks!istunnossa ollessasi

[DEMO] Istunnot VIM: ssä

VIM antaa käyttäjille mahdollisuuden tallentaa työistunnot erikseen työskentelemiensä projektien perusteella. Käyttäjät voivat helposti… asciinema.org

Voinko kopioida / leikata liimaa tarvitsematta tietää rivinumeroita?

Kyllä! Aiemmin tapasin nähdä niiden toimintojen rivinumerot ( :set nu), jotka halusin kopioida / leikata. Oletetaan, että haluan kopioida / leikata rivit 34-65. Käytin :34,65y(Copy / Y ank) tai :34,65d(Cut / D elete).

Tietysti viivojen laskeminen ja {n}yytai {n}dd(missä non viivojen lukumäärä) käyttö ei ole vaihtoehto sadoille viivoille?

Voi olla joitain toimintoja, jotka kattavat useita sivuja, etkä halua mennä alas vain unohtaa mikä oli ensimmäisen rivin numero. Siellä on yksinkertainen tapa saavuttaa tämä huolimatta mitään rivinumeroista!

Askeleet:

  • Siirry normaalitilaan, siirry aloitusriville
  • Tyyppi mk(Merkitse piste aakkosilla 'k' tai käytä mitä tahansa muuta aakkosia)
  • Siirry alaspäin (sivu alas tai mitä tahansa) ja siirry loppuriville
  • y'ktulee y saap / kopioi kaikki linjat alusta loppuun
  • d'kleikkaa / d poistaa kaikki rivit alusta loppuun

Minulla on joitain ärsyttäviä pitkiä toimintoja tiedostoni yläosassa, enkä halua tuhlata aikaa vierittämällä tai hyppäämällä viivoille. Tämä voi olla paljon kysyttävää, koska tämä ei ole IDE, mutta voimme joka tapauksessa taittaa koodilohkot?

Ehdottomasti! Oletetaan, että haluat ohittaa näiden rivinumeroiden muistamisen ja kävellä uuden löytämäsi rakkauden * merkkien * kanssa. Siirry funktion rungon ja tyypin alkuun mb. Mene nyt funktion rungon loppuun käyttämällä %(aaltosovitus) tai muuta sopivaa tekniikkaa ja paina zf'bja olet valmis!

Ennen ja jälkeen:

Jos haluat käyttää rivinumeroita, komento on vieläkin helpompi muistaa: :5,16fo(fo tarkoittaa koodia fo ld). Kun olet taittanut koodisi, on helppo vaihtaa avoimen ja suljetun näkymän välillä zo(Avaa kooditaitto) ja zc(Sulje kooditaitto). Älä korosta sitä niin paljon. Käytä zavain vaihtaaksesi avoimien ja suljettujen taitosten välillä?

Oletetaan, että vietit paljon aikaa toimintojesi taittamiseen suuressa tiedostossa, haluaisit tietysti säilyttää nämä taitokset aina, kun avaat tiedoston oikein? (Jos ei, miksi hukkasit energiaasi taittamalla ne !?), Joten sinussa on ratkaisu ~/.vimrc. Lisää seuraavat rivit ~/.vimrcja kooditaittosi tallennetaan ja palautetaan:

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

Olen yleensä varovainen sisennyksen kanssa, mutta joskus minun on muokattava jonkin muun idiootin lähdekoodia, ja se vikaa minua muokkaamaan hänen koodiaan ilman sisennystä. Onko mitään maagisia näppäinpainalluksia sen toteuttamiseksi?

Varma! Se on niin yksinkertaista: =i{. Todella siinä kaikki! ( minä olen sisäinen esine)

[DEMO] sisennys VIM: ssä

VIM sallii koodilohkojen sisennyksen muutamalla näppäimen painalluksella. Sinun tarvitsee vain sijoittaa kohdistin lauseeseen… asciinema.org

Ennen jälkeen:

Kaikki mitä tarvitsee tehdä, on paikka kohdistin johonkin sisällä estää haluat luetelmakohdan paina Escpäästäksesi normaalitilaan ja sitten: =i{. Puomi! Koko toimintokehosi (sisemmät lohkot mukaan lukien) on sisennetty.

HUOMAUTUS: Älä odota python-tiedostojesi sisennystä? Se toimii vain, kun Vim pystyy tunnistamaan alun ja lopun avaamalla ja sulkemalla sulkeet)

Voit myös lisätä / vähentää lohkon sisennystä käyttämällä:; >i {lisätäksesi and

Saatan unelmoida, mutta (* värisevä ääni *), tarkoitan, että haluan vain kokeilla sitä, Uhmm, ehkä työnnän sitä todella pitkälle tällä, mutta (* 5 sekunnin tauko *) .. ei haittaa, antaa liikkua seuraavaan kysymykseeni

Vim on melko ennakkoluuloton ottamaan kritiikkiä tai kohtaamaan tosiasian, että se ei ole IDE, mene eteenpäin, katsotaanpa, mitä sinulla on.

Uhmmm, anteeksi, mutta sattumalta (* huohottaen *) millä tahansa laajennuksella tai muulla tavalla, onko vimillä automaattinen täydennys kuten IDE?

? Saatat olla yllättynyt, mutta kyllä ​​se tekee! ? ja arvaa mitä…

* rumpurullat *

* rumpurullat *

* rumpurullat *

* rumpurullat *

Ilman laajennusta!

Kuulit minut oikein! Ainoa ehto, jonka mukaan Vim näyttää vaihtoehtoja, on "Vimin pitäisi tietää, mistä puhut". Se voi tapahtua mukana olevan lähdetiedoston tai määriteltyjen toimintojen tai muuttujien kautta.

Sinun tarvitsee vain aloittaa kirjoittaminen ja painaa sitten Ctrl+nlisäystilassa.

Kuvittele vain käyttötarkoitukset! Erityisesti jos kirjoitat C-koodia etkä pysty muistamaan tarkkaa OpenSSL-kirjastopuhelua, sinun tarvitsee vain lisätä otsikko!

[DEMO] Automaattisen täydennyksen ominaisuus VIM: ssä

VIM: llä on automaattisen täydennyksen ehdotuksia avainsanoille, funktioiden nimille, jos sopivat otsikkotiedostot ovat mukana tai jos… asciinema.org

Muistutan vielä kerran: Ei laajennuksia vaadita?

HUOMAUTUS: Otsikkotiedostot voivat olla joissakin muissa Mac-paikoissa, ja Vim ei välttämättä löydä niitä. Käytän vain Macia kirjautumalla linux-koneeseen. Joten, jos käytät Macia, anteeksi.

Ymmärrän, että Vim on vain tekstieditori, mutta jos haluat minun toimivan menettämättä keskittymistä ja poistumatta Vimistä silloin tällöin, mitä vaihtoehtoja minulla on, jos en muista kaikkia tiedostojen nimiä?

Yksinkertainen, käytä VIM: n tarjoamaa tiedostoselainta? Kyllä, Vim tarjoaa yksinkertaisen tiedostonhallinnan (* ilman laajennuksia *). Explore Kirjoita vain:: mistä tahansa Vim-ikkunasta ja näet helposti navigoitavan tiedostonhallinnan, jota voi navigoida nuolinäppäimillä ⬆️ ja ⬇️. Avaa nter/Return tiedosto / hakemisto painamalla E- näppäintä. Käyttö: q poistua tutkimusmatkailija toinen v im. Jos et halua lopettaa vim-sovellusta ja jatkaa työskentelyä avoimen tiedoston kanssa, sinulla on 3 vaihtoehtoa:

  1. Avaa tutkimusmatka vaakatasossa ( :Sexplore) tai pystysuorassa ( :Vexplore) ja poistu tutkimusmatkailijan avulla:q
  2. Avaa tutkimusmatkailija toisella välilehdellä :Texploreja poistu käyttämällä:q
  3. Avaa File Explorer nykyisessä ikkunassa ja poista nykyinen puskuri ja poista se puskuriluettelosta :bdel(puskurin poisto) -toiminnolla.
HUOMAUTUS: Voit myös käyttää lyhyttä komentoa :Extiedostonhallinnan avaamiseen

Joskus minun on toistettava samat vaiheet joillakin riveillä muokata jotain. Olen melko varma, että Vimillä on jokin ominaisuus, joka antaa minulle mahdollisuuden tehdä tämä. Olenko oikeassa?

100% oikein! Puhut makroista ja Vim tukee makroja. Viimeksi suoritetun komennon toistaminen on yksinkertaista ja voi suorittaa yksinkertaisia ​​toistuvia tehtäviä. Jos kuitenkin tekstinkäsittely koostuu useista vaiheista tuloksen saavuttamiseksi, makrot ovat käteviä.

Harkitse esimerkin C otsikkotiedosto:

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)

Oho! Unohdit laittaa puolipisteen jokaisen rivin loppuun ja tajusit myös, että kaikki nämä toiminnot palauttavat kokonaisluvun virhekoodin tyhjän sijasta.

Vaiheet, jotka sinun on suoritettava muutoksen tekemiseksi yhdellä rivillä, ovat:

  • Aseta kohdistin sanan alkuun void
  • cwPoista sana voidja tyyppi painamalla normaalitilassaint
  • Paina Esc, siirrä loppuun käyttävään Shift+aasettamaan;
  • Palaa muokatun rivin alkuun painamalla Escja painamalla^

Johtaen:

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)

Voit vain tallentaa tämän vaiheiden sarjan ja toistaa sen kaikilla 4 rivillä.

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