Vim Notes

Posted by Paweł Sacawa on Sunday, August 20, 2023
Last Modified on Tuesday, September 10, 2024

(Neo)Vim

VimScript

Opcje jako zmienne: let b:ft = &ft

Z niejasnych przyczyn, nie da się używać zmiennych w poleceniach. Zamiast tego używamy exec

" nie działa
" tabedit s:vimrc_dir . 'cocrc'

" działa
exec 'tabedit ' . s:vimrc_dir . 'cocrc'

Wtyczki

Ultisnips

Urywki (ang. snippets) z użyciem zastąpienia tekstu. Składnia ${<tab_stop_no/regular_expression/replacement/options}. Pełne informacje w pomocniku Ultisnips pod hasłem UltiSnips-transformations. Patrz niżej przykład:

snippet qD "qDebug() << ..." b
q${2/.+/C/}Debug($2) << ${1:${VISUAL:"hallo"}};
endsnippet

Opcje dla urywków są opisane w podrozdziale UltiSnips-transformations. Najważnejsze to:

  • b: Ekspansja jedynie na Poczatku wiersza
  • r: wyrażenie regularne
  • w: (z ang. word boundary) Pozwala na ekspansję kiedy <tab> jest poprzedzony dowolną granicą słowa. Domyślnie jest to dozwolone przy poprzedzającym odstęp.
  • i: (z ang. in word) ekspansja wewnątrz słów
  • A automatyczna ekspansja

Snippety Python

global !p
def func():
    return "dane"
endglobal

snippet pysnip "Jakiś snippet python"
`!p snip.rv = func()`
endsnippet

Autopolecenia i Autogroupy (ang. autocommand/autogroup)

augroup AutoZapisPlikGrupa
  autocmd TextChanged,InsertLeave * if &buftype == "" | write | endif
augroup END

By usunąć grupę, trzeba najpierw ręcznie usunąć autopolecenie w nim zawarte:

autocmd! AutoZapisPlikGrupa TextChanged,InsertLeave
augroup! AutoZapisPlikGrupa

Aby logować uruchomieniu autopoleceń, ustaw verbose >=9 oraz verbosefile, np.

# ustawia jednocześnie 'verbose' i 'verbosefile'
vim -V9vim.log plik