I den här omfattande guiden kommer jag att förklara hur man mappar nycklarna i Vim för att automatisera operationerna. Från att skapa en grundläggande nyckelkarta till avancerad nyckelmappning, tillsammans med processerna för att göra dem permanenta och ta bort dem.
- Syntax
- Vim Special Argument
- Skapa en grundläggande tangentkarta
- Lista Keymaps
- Göra Keymaps permanenta
- Undvika rekursion
- Skapa lägesspecifika tangentkartor
- Hur man kartlägger mushändelser
- Hur man kartlägger med Leader Key i Vim
- Hur man mappar en Vimscript-funktion
- Hur man kartlägger externa kommandon i Vim
- Hur man tar bort en nyckelkarta i Vim
- Vim Key Mapping Cheat Sheet
- Slutsats
Syntax
För att mappa nyckeln i Vim används följande syntax:
I ovanstående syntax:
|
nmap, imap, vmap, xmap, cmap eller omap | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
*I ovanstående syntax är avsnittet Vim Special ArgumentVim Special Arguments är taggar som används för att ge ytterligare funktionalitet till tangentmapparna. Dessa argument visas efter kommandot :map och före {rhs} och {lhs}. Till exempel, för att göra en karta buffertspecifik, använd specialargumentet på följande sätt: :Karta < buffert > < C-a > ggVG
Vim specialtangenter nämns i följande bild.
Till exempel, om du vill använda mellanslagstangenten i tangentmappning, kommer Skapa en grundläggande tangentkarta i VimLåt oss förstå Vim-nyckelmappning med ett grundläggande exempel. Jag vill mappa kommandot välj alla linjer ( ggVG ) till ctrl+a nycklar. För att mappa ctrl+a-tangenterna kör jag följande kommando i Vim. :Karta < C-a > ggVG Här, På samma sätt, för att kartlägga linjenummer växla funktionalitet med F1 nyckelanvändning: :Karta < F1 > :ställ nummer !Nu, när du trycker på F1-tangenten kommer radnumret att aktiveras, och om du trycker på det igen inaktiveras det. Observera att denna metod endast mappar nycklarna i den aktuella bufferten och kommer att tas bort när bufferten stängs. Lista KeymapsAnvänd kommandot :map för att lista alla nyckelmappningar av normala, visuella och väntande lägen. :KartaFör att lista nyckelmappning av Föra in och kommandorad lägen, använd :map! Kommando. :Karta !För att lista nyckelmappningen av ett specifikt läge, skriv bara in den första bokstaven i läge före kartnyckelordet.
Dessutom, för att lista alla kartor inklusive plugin-kartor med sökvägar, använd :omfattande karta kommando. :omfattande karta För en specifik nyckel nämner du helt enkelt nyckeln i kommandot ( :verbose map Göra Keymaps permanentaKeymaps som nämns i avsnittet ovan kommer endast att mappa nycklarna i den aktuella bufferten. För att göra Vim-nyckelmappningar permanenta måste kartorna placeras i vimrc-filen.
Observera att när du placerar tangentbordet i vimrc lägg inte till ett kolon (:) före Karta kommando. Efter att ha placerat tangentbordet i vimrc fil, spara och avsluta med kommandot :wq eller med tangenterna skift+zz. Keymaps placerade i vimrc filen kommer att vara global och kan användas i alla Vim-sessioner. Vissa tangentmappningar kan dock tillfälligt inaktiveras om de påverkar arbetet i den aktuella sessionen, se avsnittet Hur man tar bort en tangentkarta i Vim nedan. De vimrc är inställningsfilen för Vim som innehåller olika kommandon och inställningar. Det finns i /usr/share/vim/ katalog på macOS och /etc/vim på Linux. Det är viktigt att notera att vimrc filerna i de nämnda katalogerna är systemspecifika filer. Du kan redigera dessa filer också för nyckelmappning, men jag skulle rekommendera att skapa en användarspecifik vimrc filen i hemkatalogen. Undvika rekursionInnan du går vidare är det viktigt att lära dig om rekursion i Vim-nyckelmappning. Dess nackdelar och hur man förhindrar det. Det kan förstås genom att använda ett exempel. :Karta dd 3jddI exemplet ovan har jag kartlagt dd för att flytta ned med 3 rader och ta bort raden under markören. Nu, när jag trycker på dd , kommer den att försöka köra kartan 3jdd . Vim kommer att tolka dd kommandot som en karta och kör kartan upprepade gånger, som visas i följande bild.
Notera : Rekursion kan frysa Vim-redigeraren. Tryck på för att frigöra den ctrl+c nycklar. För att undvika återfall, byt ut Karta nyckelord med noremap , var ' nore ' betyder icke-rekursiv . Jag kommer att ersätta Karta nyckelord med noremap för att fixa rekursionen i tangentöversikten ovan. :noremap dd 3jddJag kommer att rekommendera att använda noremap istället för Karta för att undvika att skapa rekursiv mappning av misstag. Skapa lägesspecifika tangentkartorVim har gjort nyckelmappning så mångsidig att även en tangentkarta för ett specifikt läge kan skapas ganska enkelt. Till exempel, om du har gjort en tangentkarta för infogningsläge med hjälp av en F1 nyckel, då kan du mappa densamma F1 knappa in ett annat läge för en helt ny operation. I följande exempel har jag kartlagt F1 för att ta bort 3 rader i vanligt läge och dra 3 linjer i Föra in läge. :nmap < F1 > 3dd:imap < F1 > < C-t > Den första kartan raderar tre rader i normalt läge när du trycker på F1-tangenten, medan den andra kartan lägger till en indragning i den aktuella raden när du är i infogningsläge med samma knapp. Låt oss nu förstå kartläggning i varje läge. NormallägesmappingFör att tillämpa en karta i normalt läge, använd endast nmap nyckelord. Till exempel att kopiera alla rader i en fil med hjälp av ctrl+c tangenter kommer jag att använda följande kommando. :nmap < C-c > ggVGySom diskuterats tidigare är det en bästa praxis att använda en icke-rekursiv metod för att kartlägga en nyckel, därför kommer jag att ersätta nmap med nnoremap nyckelord. :nnoremap < C-c > ggVGyPlacera den utan kolon (:) i vimrc fil för att göra den till en permanent tangentkarta. jag kommer använda noremap istället för Karta i följande exempel. Infoga lägesmappningFör att mappa nycklar för infogningsläget, använd bara i istället för n . Till exempel, i infogningsläge, ctrl+sid och ctrl+n tangenter används för att autokomplettera ordet baserat på matchning bakåt respektive framåt. Att kartlägga ctrl+sid tangenter med tabbtangenten kommer jag att använda följande kommando. :inoremap < Flik > < C-p > Ännu viktigare, om du vill kartlägga operatörens väntande läge kommandon i infogningsläge , då måste du infoga Nu, när jag trycker på ctrl+x nycklar, kommer den att skriva ut 3ddi kommando istället för att utföra det.
För att fixa det kommer jag att infoga Nu kommer kommandot att köra håll mig i infogningsläget. Många mini bärbara datorer saknar Esc tangent, vilket är viktigt för att lämna det aktuella läget. Så för att kartlägga Esc tangenten för att lämna infogningsläget, kan tangentmappning användas. I följande exempel använder jag ex knapparna för att gå tillbaka till normalt läge. :inoremap ex < Esc >När du snabbt trycker på ex knapparna kommer infogningsläget att avslutas och går därmed in i det normala läget. Visual Mode MappingDet visuella läget är ett mycket viktigt läge för att välja text i Vim-redigeraren. Förutom det grundläggande valet har det visuella läget andra olika lägen som visuell linje och visuella blocklägen. I det visuella läget, tilde (~) används för att växla fallet. För att använda tilde (~) måste du trycka på de två tangenterna (skift+~) . I följande exempel mappar jag c-nyckeln in visuellt läge för att välja ett ord under markören och ändra dess skiftläge. :vnoremap c iw~Tryck nu på v för att gå in i det visuella läget och tryck på c-tangenten för att växla ordet under markören som visas i följande GIF.
KommandoradslägesmappningMånga viktiga Vim-kommandon fungerar endast i kommandoradsläget. Till exempel för att spara filen :I kommandot används på samma sätt för att spara och avsluta :wq kommando används. Alla flikar och delade operationer görs också i kommandoradsläget. Till exempel, för att skapa en ny flik, : underordnad kommando används. Tja, för att snabbt skapa en flik, ctrl+t nycklar räcker. :cnoremapping < C-t > ämne < CR >Tryck nu på kolon (:) för att gå in i kommandoradsläget och sedan ctrl+t för att öppna en ny flik; det är mycket snabbare än att skriva hela ämne kommando och Lämna tillbaka nyckel.
Skapa anpassade Vim-kommandon Gå nu in i kommandoläget och kör : Mycmd kommando. Operatör väntande lägesmappningOperatör väntande läge är ett läge där Vim väntar på rörelsekommandot efter att operatörstangenten har tryckts ned. De vanliga operatorerna är y, d och c. Till exempel, för att ta bort den aktuella raden och de 3 följande raderna använder du operatorn d med 3j rörelse (d3j). Du kan inte trycka på dessa knappar samtidigt för att uppnå önskad funktion. Läget används vanligtvis för att kartlägga rörelserna. Låt oss kartlägga en rörelse som väljer den aktuella linjen och 3 linjer följt av den. :onoremap < F2 > 3jNu, för att rycka den nuvarande linjen och 3 linjer följt av den, använd theF2 nycklar, på samma sätt, den d operatör kan också användas. En annan viktig sak att tänka på är om du lägger till en räkning till den ovan nämnda kartlagda rörelsen, låt oss säga 2 Hur man kartlägger mushändelserÄven om Vim är en helt anpassningsbar tangentbordscentrerad textredigerare, gör tillgängligheten av musfunktioner den ännu bättre. Förutom vanliga tangentbordstangenter kan alla mushändelser också mappas i Vim. Om du till exempel vill mappa höger dubbelklick och vänster dubbelklick för att hoppa markeringarna framåt respektive bakåt, använd följande mappning. :noremap < 2 -Högermus > ] `:noremap < 2 -Vänster mus > [ ` Andra mushändelser som kan kartläggas ges i följande tabell.
Hur man kartlägger med Leader Key i VimVim-mappning är ofullständig utan ledarnyckeln. Ledarnyckeln är standardnyckeln som kan användas för att mappa nycklar, även om de är mappade för att utföra vissa andra uppgifter. Till exempel, om du har kartlagt d för att radera alla rader, då kan vi mappa samma nyckel för att ta bort endast 5 rader med hjälp av ledartangenten. För dem som inte är bekanta med Vim-ledarnyckeln. Det är en nyckel som har prefixet en annan nyckel eller uppsättning nycklar för mappningskommandon eller operationer. Vims standardledarnyckel är ett snedstreck (\), men den är anpassningsbar. Till exempel dd kommandot används för att ta bort raden under markören. Om du vill kartlägga dd kommandot för att radera alla rader i filerna, sedan kan du använda ledartangenten. :noremap < Ledare > dd ggVGdNu, när du trycker på \dd tangenten kommer alla rader i filen att raderas. Du kan tillskriva Vim-ledarnyckeln som kontrollnyckeln på Windows eller kommandotangenten i macOS. Hur man mappar en Vimscript-funktionVim-redigeraren är inte begränsad till kommandon eller operationer. Det finns ett helt programmeringsspråk runt Vim för att skapa anpassad funktionalitet som kallas Vimscript. Du kan enkelt skapa ett skript eller en funktion och mappa det till en nyckel. Låt oss till exempel skapa en funktion som möjliggör inställningar som radnummer, musfunktionalitet och textbredd. fungera Mina inställningar ( )uppsättning siffra uppsättning mus =a uppsättning textbredd = 80 slutfunktion Placera denna funktion i vimrc-filen. Låt oss kartlägga denna funktion med ledaren och s-tangenterna. jag kommer använda :noremap < Ledare > s :ring MySettings ( ) < CR >Nu, när du trycker på \s tangenter kommer funktionen att anropas och all funktionalitet inuti funktionen kommer att köras. Notera : Den första bokstaven i funktionsnamnet ska alltid vara versal när du skapar en anpassad funktion i Vim. Hur man kartlägger externa kommandon i VimDe externa kommandona kan också mappas i Vim. Externa kommandon hänvisar till Linux- eller Unix-kommandon. Till exempel om du vill kartlägga det externa sortera kommando för att sortera alla rader i den aktuella bufferten till F1 nyckel, använd följande kommando. :noremap < F1 > : %! sortera < CR >På samma sätt, om du skriver en skriptfil och gör den körbar utan att lämna Vim-sessionen, kan du använda chmod kommando internt. Till exempel, för att göra den aktuella filen körbar kan du köra kommandot :!chmod +x % i Vim. Om du ofta utför denna uppgift, mappa helt enkelt en nyckel till den. :noremap < F1 > : ! chmod +x %I Vim kan alla externa kommandon användas med ett utropstecken (!). Hur man tar bort en nyckelkarta i VimFör att ta bort keymaps i Vim, identifiera först var den är definierad. Som diskuterats tidigare kan nyckelkartor vara buffertlokala och permanenta. Om tangentmappen är permanent och placerad i vimrc-filen, kommer nycklarna helt enkelt att tas bort om du tar bort dem från filen. Om kartläggningen görs i den aktuella bufferten kan de tas bort med hjälp av :avkarta eller :avkarta! kommandon.
Till exempel för att ta bort
För att ta bort alla kartor i den aktuella bufferten, använd :mapclear kommando. :mapclearOvanstående kommando kommer att radera alla tangenter för normalt, visuellt, välj eller väntande läge. För att rensa alla tangentöversikter för infognings- och kommandoradslägen, använd: :mapclear ! Observera att standard Vim-kommandon inte kan vara tydliga, men de kan inaktiveras med hjälp av :avkarta kommando med dd kommer inte längre att fungera i den aktuella bufferten. Med den här metoden kan valfri tangentkarta inaktiveras för den aktuella sessionen. Vim Key Mapping Cheat SheetFöljande bild ger en lista över alla kommandon och deras specifika lägen för referens.
SlutsatsVim-nyckelmappning är ett praktiskt sätt att automatisera dina uppgifter, ofta använda tangentbindning, kommandon och andra operationer. Det är ett mångsidigt ämne och i den här guiden täckte jag alla viktiga aspekter som är relaterade till nyckelkartläggning i Vim. Från allmän syntax till att skapa en grundläggande tangentkarta och hela vägen till kartläggning av avancerade Vimscript-funktioner och externa kommandon. För att lära dig mer om Vim-nyckelmappning, använd :hjälp med tangentmappning kommando i Vim. |