Skip to content

Instantly share code, notes, and snippets.

@mawkler
Created November 24, 2021 13:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mawkler/052740f030a26f2200aa4a7af2536fdb to your computer and use it in GitHub Desktop.
Save mawkler/052740f030a26f2200aa4a7af2536fdb to your computer and use it in GitHub Desktop.
Generella vim-tips

Generella tips

För att få överblick över alla Vims kommandon: :help quickref.txt

Vims syntax för kommandon. Exempelvis:

  • <c-d> betyder ctrl-d

  • <m-d> betyder alt-d (m läses "meta")

  • <c-w>w betyder tryck ctrl-w, sen w

  • <cr> är samma sak som <enter>

  • För att kolla upp vad exempelvis <c-w>w så använder du :help CTRL-W_w

  • Använd <Tab> i menyn då den ger förslag utifrån det du skrivit. Exmpelvis om du skriver :help ctrl- och sen trycker <Tab> istället för <Enter> så får du upp massa olika förslag som du kan navigera genom med ctrl-n/ctrl-p (next/previous) eller <Down>/<Up>. Funkar även när du skriver början på mapp-/filnamn efter exempelvis :e.

För att hantera fönster:

  • <c-w>v - splittar vertikalt skärmen i två fönster
  • <c-w>s - splittar horisontellt skärmen i två fönster
  • <c-w>c - stänger det aktiva fönstret
  • <c-w>o - stänger alla fönster förutom det aktiva fönstret
  • <c-w>h/<c-w>j/<c-w>k/<c-w>l - för att hoppa till vänstra/undre/övre/högra fönfönstret
  • <c-w>w - för att hoppa tillbaka till tidigare fönster
  • Alla ovan nämnda kommandon förutom <c-w>c går att göra och hålla in ctrl hela tiden, dvs <c-w><c-v> är samma sak som <c-w>v
    • Om du lägger till nmap <C-c> <Nop> till init.vim så funkar även <c-w><c-c> istället för <c-w>c
  • För fler kommandon, se :help windows

Underskattade kommandon:

  • . - repeterar senaste kommando
  • s - "sentence" text object, t.ex. dis/das - "delete in sentence"/"delete around sentence". För definition av sentence: :help sentence.
    • )/( hoppar till starten av nästa/tidigare sentence
  • gx - öppnar webbadress under cursor i din webbläsare, testa på https://www.google.com/
  • I/A för att börja redigera längst fram/längst bak på raden du står på
  • >>/<< - indenterar raden till höger/vänster, går också att göra i visual mode med >/<
  • <C-o>/<C-i> - hoppar till tidigare/senare ställe som du varit på med din cursor
  • <C-6> - hoppar till tidigare filen (buffer) du varit i - för att hoppa mellan två filer
  • g;/g, - hoppar till tidigare/senare ställe där du gjort en ändring
  • <c-v> - för att markera text i visual mode som ett block
    • I - För att redigera på alla rader i början av blocket
    • A - För att redigera på alla rader i början av blocket
  • gv - återställer senaste markering i visual mode
  • e/ge - för att ställa dig med din cursor på sista karaktären ordet du står på/det tidigare ordet. Användbart tillsammans med a:
    • Av någon anledning har pluginet vim-markdown hijackat ge i markdown-filer för att öppna länkar, har inte hunnit kolla upp hur man stänger av det
    • ea/gea - för att börja skriva i slutet på ordet du står på / det tidigare ordet
  • <c-a>/<c-x> - ökar/minskar värdet på siffra under din cursor
    • Kolla även på :help v_g_CTRL-A (ascoolt)
  • ~ - För att toggla uppercase/lowercase på karaktären under din cursor, eller hela markeringen i visual mode
  • gU/gu- för att ändra till uppercase/lowercase på nästa motion/text object, typ gUw, eller på markeringen i visual mode
  • t/T/f/F tar counts, t.ex. c2t. ändrar till näst-nästa .
  • Det är generellt bättre att lära sig att använda _ istället för 0 för att gå till början av raden, då _ skippar whitespace i början av raden (bra för indenterade listor mm)
  • = - indenterar automatiskt text object eller markering i visul mode
    • == - indenterar automatiskt raden din cursor är på
  • */# - söker nedåt/uppåt efter ordet under din cursor
  • gj/gk - för att hoppa ner/upp i "displayed line", användbart om raden är längre än fönstrets bredd så att en rad tar upp två "displayed lines"
  • <c-l> - Tömmer eventuell text som printats längst ned till vänster
  • Om du lägger till vnoremap // y/<C-R>"<CR> i init.vim så kan du med // söka i visual mode efter det du markerat
  • Om du lägger till map g/ /\<\><Left><Left> - i init.vim så kan du med g/ söka bara efter hela ord (dvs ignorera träffar på delar av ord)
  • För att hoppa till exempelvis rad 42 kan du använda :42 eller 42G
  • För att hoppa till nästa eller tidigare rubrik i markdown: [[ och ]]

Lägg till i init.vim

  • För att få en indikator efter att du kopierat text med y. Sätt 350 till hur länge texten ska vara highlightad i millisekunder:

    augroup highlight_yank
      autocmd!
      autocmd TextYankPost * silent! lua require'vim.highlight'.on_yank("IncSearch", 350)
    augroup END
  • För att appenda . till raden med <leader>. utan att pekaren flyttas, och samma sak för , och ?:

    map <leader>, :call VisualAppend(",")<CR>
    map <leader>. :call VisualAppend(".")<CR>
    map <leader>? :call VisualAppend("?")<CR>
    
    " Appends `char` to current line or visual selection
    function! VisualAppend(char)
      exe "normal! m0"
      exe "normal! A" . a:char
      exe "normal! `0"
    endfunction
  • För att tvinga :help-pages i vertikala fönster istället för horisontella

    augroup vertical_help " Open :help in 85 character wide vertical instead of horizontal split
    autocmd!
    autocmd BufEnter *.txt if &buftype == 'help' | wincmd L | vertical resize 85 | endif
    augroup END
  • För att tillåta musklick i vim (avstängt by default hehe): set mouse=a

  • För att alltid highlighta raden du står på set cursorline

  • För att göra tab-karaktärer 4 spaces breda istället för 8 set tabstop=4

  • För att snygga till några färger:

    highlight CursorLineNr term=bold gui=bold
    highlight! link Search Visual
    highlight! link SpecialKey Directory
  • För att automatiskt upptäcka externa ändringar i fil du har öppen

    set autoread        " Automatically read in the file when changed externally
    augroup filechanged " Check if any file has changed
    autocmd!
    autocmd FocusGained * silent! checktime
    augroup end
    
  • Make ;/, always seach forward/backward, respectively

    nnoremap <expr> ; getcharsearch().forward ? ';' : ','
    nnoremap <expr> , getcharsearch().forward ? ',' : ';'
    

Annat

  • Om du markerat text i visual mode kan du trycka p/<leader>p för att ersätta det med det något som du kopierat
  • Macros - för att spela in och spela upp många kommandon
  • Sessions - för att spara en session, dvs filer och fönster öppna i vim och återställa nästa gång du öppnar vim
  • Folds - för att gömma (fold) delar av dokumentet som du inte jobbar på
  • Tryck <Up>/<Down> eller <C-p>/<C-n> ('previous'/'next') i command-line-menyn (:) eller search (/) för att stega igenom historik av kommandon/sökningar
  • Lägg till set nomagic till init.vim så tolkas dina sökningar bokstavligen, och inte med regex (annars matchar exempelvis en sökning efter . alla tecken i filen)
    • Dock för att söka efter tecknet / måste du alltid sätta ett \ framför, dvs \/, förutom om du söker bakåt med ?
  • Vimium - Google Chrome extension som ger dig Vim-bindings
  • För att se vad ett custom commando gör, exempelvis <leader>V, använd :map <leader>V
    • Du kan även söka efter delar av kommandon, typ :help <leader> för att se alla kommandon som börjar med <leader>
    • För att se vad vanilla-kommandon gör, typ ~ använd :help ~
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment