Git, плъгини
30 март 2023
Административни неща
- 13ти-18ти април: Великден
- Без упражнения тези дни, без лекция на 13ти
Преговор
- Grep команда
Преговор
- Grep команда
- Влизане в шела със
:sh
,:terminal
, изпълняване на команди със:!
Преговор
- Grep команда
- Влизане в шела със
:sh
,:terminal
, изпълняване на команди със:!
- Директория
~/.vim
съсcolors
,plugin
,autoload
Преговор
- Grep команда
- Влизане в шела със
:sh
,:terminal
, изпълняване на команди със:!
- Директория
~/.vim
съсcolors
,plugin
,autoload
- Modelines
Преговор
- Grep команда
- Влизане в шела със
:sh
,:terminal
, изпълняване на команди със:!
- Директория
~/.vim
съсcolors
,plugin
,autoload
- Modelines
- Folding
Преговор
- Grep команда
- Влизане в шела със
:sh
,:terminal
, изпълняване на команди със:!
- Директория
~/.vim
съсcolors
,plugin
,autoload
- Modelines
- Folding
- Autoload
Преговор
- Grep команда
- Влизане в шела със
:sh
,:terminal
, изпълняване на команди със:!
- Директория
~/.vim
съсcolors
,plugin
,autoload
- Modelines
- Folding
- Autoload
- Runtimepath и Pathogen
Git
Git
- Version control system: Правите си snapshot-и на кода
Git
- Version control system: Правите си snapshot-и на кода
- Инсталация: https://git-scm.com/
Git
- Version control system: Правите си snapshot-и на кода
- Инсталация: https://git-scm.com/
- Vim в github: https://github.com/vim/vim
Git
За домашна употреба
git init .
-- инициализира ново repo
Git
За домашна употреба
git init .
-- инициализира ново repogit status
-- дава ни информация за текущото състояние
Git
За домашна употреба
git init .
-- инициализира ново repogit status
-- дава ни информация за текущото състояниеgit add <file1> <file2>
-- добавя файлове за commit-ване ("stage"-ва ги)git add --all
Git
За домашна употреба
git init .
-- инициализира ново repogit status
-- дава ни информация за текущото състояниеgit add <file1> <file2>
-- добавя файлове за commit-ване ("stage"-ва ги)git add --all
git reset <file>
-- премахва файлове от списъка за commit-ване ("unstage"-ва ги)git reset
Git
За домашна употреба
git init .
-- инициализира ново repogit status
-- дава ни информация за текущото състояниеgit add <file1> <file2>
-- добавя файлове за commit-ване ("stage"-ва ги)git add --all
git reset <file>
-- премахва файлове от списъка за commit-ване ("unstage"-ва ги)git reset
git commit
-- отваря редактор (vim, разбира се) със съобщение за писанеgit commit -m "Commit message"
git commit -v
Git
За домашна употреба
git init .
-- инициализира ново repogit status
-- дава ни информация за текущото състояниеgit add <file1> <file2>
-- добавя файлове за commit-ване ("stage"-ва ги)git add --all
git reset <file>
-- премахва файлове от списъка за commit-ване ("unstage"-ва ги)git reset
git commit
-- отваря редактор (vim, разбира се) със съобщение за писанеgit commit -m "Commit message"
git commit -v
- Tim Pope описва добри съобщения: https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
Git
За домашна употреба
git diff
git diff --stat
- Бонус:
git diff | vim - -R
Git
За домашна употреба
git diff
git diff --stat
- Бонус:
git diff | vim - -R
git log
git log --oneline
Git
За домашна употреба
git diff
git diff --stat
- Бонус:
git diff | vim - -R
git log
git log --oneline
git checkout <sha>
-- сменя на този конкретен commit
Git
С други хора
git remote add origin git@github.com:AndrewRadev/vim-fmi-vimfiles.git
git remote -v
Git
С други хора
git remote add origin git@github.com:AndrewRadev/vim-fmi-vimfiles.git
git remote -v
git push -u origin main
---u
-то е нужно само първия път, оттам нататък:git push
би трябвало да сработи
Git
С други хора
git remote add origin git@github.com:AndrewRadev/vim-fmi-vimfiles.git
git remote -v
git push -u origin main
---u
-то е нужно само първия път, оттам нататък:git push
би трябвало да сработиgit pull
git fetch
-- само събира промени от remote-а, но не ги прилага
Git
С други хора, които не харесваме
git revert <sha>
-- създава нов commit, но не променя историята
Git
С други хора, които не харесваме
git revert <sha>
-- създава нов commit, но не променя историятаgit reset --hard <sha>
-- изцяло изчиства всякакво състояние до дадения commitgit reset --hard
-- изчиства всички не-commit-нати промени
Git
С други хора, които не харесваме
git revert <sha>
-- създава нов commit, но не променя историятаgit reset --hard <sha>
-- изцяло изчиства всякакво състояние до дадения commitgit reset --hard
-- изчиства всички не-commit-нати промениgit push --force
git push --force-with-lease
-- по-учтиво, но просто проверява че текущия branch track-ва това, към което push-ваме- "The protection it offers over --force is ensuring that subsequent changes your work wasn’t based on aren’t clobbered"
Git
С други хора, които не харесваме
git revert <sha>
-- създава нов commit, но не променя историятаgit reset --hard <sha>
-- изцяло изчиства всякакво състояние до дадения commitgit reset --hard
-- изчиства всички не-commit-нати промениgit push --force
git push --force-with-lease
-- по-учтиво, но просто проверява че текущия branch track-ва това, към което push-ваме- "The protection it offers over --force is ensuring that subsequent changes your work wasn’t based on aren’t clobbered"
- Не е предназначен за нормална употреба, а за фиксове. Важно е да знаете, че само вие мажете на тоя бранч.
Git
Когато искаме да ремонтираме нещата
git reflog
-- всички състояния, дори и тези, които сме изтрили от дървото- Не е гаранция --
git prune
илиgit gc
ще зачисти "висящи" състояния
Git
За Vim плъгини
- Можем да теглим Vim плъгини от https://www.vim.org/
- Можем и чрез
git clone https://github.com/tpope/vim-surround
Git
За Vim плъгини
- Можем да теглим Vim плъгини от https://www.vim.org/
- Можем и чрез
git clone https://github.com/tpope/vim-surround
- Или може би…
git submodule add https://github.com/tpope/vim-surround bundle/surround
git submodule add git@github.com:AndrewRadev/undoquit.vim.git bundle/undoquit
Git submodules
- Малко са досадни. Не ги препоръчвам силно
- Но ако искате да си работите по плъгините…
- https://git-scm.com/book/en/v2/Git-Tools-Submodules
- Вероятно ще се наложи:
git config --global core.excludesfile ~/.gitignore
Git submodules
- Малко са досадни. Не ги препоръчвам силно
- Но ако искате да си работите по плъгините…
- https://git-scm.com/book/en/v2/Git-Tools-Submodules
- Вероятно ще се наложи:
git config --global core.excludesfile ~/.gitignore
git submodule sync
-- ако променим URL-а в.gitmodules
git@github
vshttps://github.com
-- write/read
Git submodules
- Малко са досадни. Не ги препоръчвам силно
- Но ако искате да си работите по плъгините…
- https://git-scm.com/book/en/v2/Git-Tools-Submodules
- Вероятно ще се наложи:
git config --global core.excludesfile ~/.gitignore
git submodule sync
-- ако променим URL-а в.gitmodules
git@github
vshttps://github.com
-- write/read- Хитър трик:
../undoquit.vim.git
- Ако клонирам репото през
https://github.com/AndrewRadev/vim-fmi-vimfiles
:https://github.com/AndrewRadev/undoquit.vim.git
- Ако клонирам репото през
git@github.com:AndrewRadev/vim-fmi-vimfiles.git
:git@github.com:AndrewRadev/undoquit.vim.git
- Ако клонирам репото през
- (Ако не разбирате горното, не го мислете твърде много)
Vim плъгини по лесния начин
vim-plug: https://github.com/junegunn/vim-plug
call plug#begin()
Plug 'tpope/vim-surround'
Plug 'AndrewRadev/undoquit.vim'
Plug 'AndrewRadev/andrews_nerdtree.vim'
Plug 'AndrewRadev/nerdtree'
Plug 'kana/vim-smartword'
Plug 'simnalamburt/vim-mundo'
call plug#end()
Aside: lazy-loading
Undoquit и липсващата аутокоманда
Aside: lazy-loading
Undoquit и липсващата аутокоманда
- Накратко: недейте
Aside: lazy-loading
Undoquit и липсващата аутокоманда
- Накратко: недейте
- Надълго: дейте ако много искате, ама вероятно не си заслужава
vim --startuptime <file>
Aside: lazy-loading
Undoquit и липсващата аутокоманда
- Накратко: недейте
- Надълго: дейте ако много искате, ама вероятно не си заслужава
vim --startuptime <file>
- If you see something, say something:
Native "packages"
:help packages
- Намират се във
~/.vim/pack
Native "packages"
:help packages
- Намират се във
~/.vim/pack
- Не са плъгини, а колекции от плъгини, организирани в
start
иopt
директории
Native "packages"
:help packages
- Намират се във
~/.vim/pack
- Не са плъгини, а колекции от плъгини, организирани в
start
иopt
директории
pack/foo/README.txt
pack/foo/start/foobar/plugin/foo.vim
pack/foo/start/foobar/syntax/some.vim
pack/foo/opt/foodebug/plugin/debugger.vim
Native "packages"
:help packages
- Намират се във
~/.vim/pack
- Не са плъгини, а колекции от плъгини, организирани в
start
иopt
директории
pack/foo/README.txt
pack/foo/start/foobar/plugin/foo.vim
pack/foo/start/foobar/syntax/some.vim
pack/foo/opt/foodebug/plugin/debugger.vim
- След като се зареди vimrc-то, всичко в
pack/foo/start
се добавя в runtimepath - Всичко в
opt
си седи, зарежда се експлицитно сpackadd foodebug
Проблеми с packages
- Никой actually не прави "пакети". Това е несъвместимо с други package manager-и. Масово индивидуални плъгини се слагат в една директория просто като един "пакет".
Проблеми с packages
- Никой actually не прави "пакети". Това е несъвместимо с други package manager-и. Масово индивидуални плъгини се слагат в една директория просто като един "пакет".
- Плъгин се зарежда автоматично ако е в
start
, или може да се зареди ръчно ако е вopt
, но двете не се комбинират
Проблеми с packages
- Никой actually не прави "пакети". Това е несъвместимо с други package manager-и. Масово индивидуални плъгини се слагат в една директория просто като един "пакет".
- Плъгин се зарежда автоматично ако е в
start
, или може да се зареди ръчно ако е вopt
, но двете не се комбинират - (Но има workaround със
runtime START
, което все е нещо)
Проблеми с packages
- Никой actually не прави "пакети". Това е несъвместимо с други package manager-и. Масово индивидуални плъгини се слагат в една директория просто като един "пакет".
- Плъгин се зарежда автоматично ако е в
start
, или може да се зареди ръчно ако е вopt
, но двете не се комбинират - (Но има workaround със
runtime START
, което все е нещо) - Ако пишете документация за плъгини, това е супер досадно за обяснение
Проблеми с packages
- Никой actually не прави "пакети". Това е несъвместимо с други package manager-и. Масово индивидуални плъгини се слагат в една директория просто като един "пакет".
- Плъгин се зарежда автоматично ако е в
start
, или може да се зареди ръчно ако е вopt
, но двете не се комбинират - (Но има workaround със
runtime START
, което все е нещо) - Ако пишете документация за плъгини, това е супер досадно за обяснение
- Ако ползвате submodules, директориите са супер досадни за местене
Предимства на packages пред pathogen
- 🤷
Предимства на packages пред pathogen
- 🤷
- Може би performance? Но на модерно SSD това не е проблем
Предимства на packages пред pathogen
- 🤷
- Може би performance? Но на модерно SSD това не е проблем
- Може би single loading? Но всички плъгини масово използват
if !exists('g:loaded_<plugin-name>') | finish | endif
Предимства на packages пред pathogen
- 🤷
- Може би performance? Но на модерно SSD това не е проблем
- Може би single loading? Но всички плъгини масово използват
if !exists('g:loaded_<plugin-name>') | finish | endif
- Стандартизацията на зареждането на плъгина с
:packadd
е смислена. Но това е само заopt
плъгини, иначе пак се връщаме на хакове сruntime
. - Работи добре за вградените Vim плъгини
Предимства на packages пред pathogen
- 🤷
- Може би performance? Но на модерно SSD това не е проблем
- Може би single loading? Но всички плъгини масово използват
if !exists('g:loaded_<plugin-name>') | finish | endif
- Стандартизацията на зареждането на плъгина с
:packadd
е смислена. Но това е само заopt
плъгини, иначе пак се връщаме на хакове сruntime
. - Работи добре за вградените Vim плъгини
- In general, packages работят. Ако просто мятате неща в
pack/<whatever>/start
, това ще е ок. (Но и pathogen работи.)
Long story short
- Ако искате лесен живот, vim-plug е чудесен избор
Long story short
Long story short
- Ако искате лесен живот, vim-plug е чудесен избор
- Ако сте ок да си играете със submodules и/или искате да си теглите zip файлчета с плъгини, pathogen работи перфектно
- Ако искате да използвате вградените механизми до максимума им,
:help packages
, или minpac, което ще ви тегли кода с git и ще го слага вpack/
директорията.
Long story short
- Ако искате лесен живот, vim-plug е чудесен избор
- Ако сте ок да си играете със submodules и/или искате да си теглите zip файлчета с плъгини, pathogen работи перфектно
- Ако искате да използвате вградените механизми до максимума им,
:help packages
, или minpac, което ще ви тегли кода с git и ще го слага вpack/
директорията. - За neovim-специфични опции (сигурно) ще говорим по-нататък (но всички горни неща работят без проблеми)
Aside: идея за проект
Напълно смислена идея е да си напишете собствен plugin manager със…
Aside: идея за проект
Напълно смислена идея е да си напишете собствен plugin manager със…
- Autocompletion/search на имена на проекти
Aside: идея за проект
Напълно смислена идея е да си напишете собствен plugin manager със…
- Autocompletion/search на имена на проекти
- Scrape-ване на vim.org, или лесна инсталация от bitbucket, gitlab, неща с не-git version control…
Aside: идея за проект
Напълно смислена идея е да си напишете собствен plugin manager със…
- Autocompletion/search на имена на проекти
- Scrape-ване на vim.org, или лесна инсталация от bitbucket, gitlab, неща с не-git version control…
- Проверка за ъпдейти с virtual text до entry-тата във vimrc-то
Aside: идея за проект
Напълно смислена идея е да си напишете собствен plugin manager със…
- Autocompletion/search на имена на проекти
- Scrape-ване на vim.org, или лесна инсталация от bitbucket, gitlab, неща с не-git version control…
- Проверка за ъпдейти с virtual text до entry-тата във vimrc-то
- Version/dependency management
Aside: идея за проект
Напълно смислена идея е да си напишете собствен plugin manager със…
- Autocompletion/search на имена на проекти
- Scrape-ване на vim.org, или лесна инсталация от bitbucket, gitlab, неща с не-git version control…
- Проверка за ъпдейти с virtual text до entry-тата във vimrc-то
- Version/dependency management
- Blackjack etc…
Aside: идея за проект
Напълно смислена идея е да си напишете собствен plugin manager със…
- Autocompletion/search на имена на проекти
- Scrape-ване на vim.org, или лесна инсталация от bitbucket, gitlab, неща с не-git version control…
- Проверка за ъпдейти с virtual text до entry-тата във vimrc-то
- Version/dependency management
- Blackjack etc…
- Не го препоръчвам, доста специфична идея е, просто е една идея