V článku Pět nejlepších pluginů Vim pro systémové správce jsem popsal pět pluginů plus bonus, které správcům systému usnadňují život při používání Vimu. Tento článek to rozšíří vytvořením příručky Ansible pro konfiguraci počátečního prostředí Vim pomocí těchto pluginů.
Tato příručka funguje na systému Fedora Linux, ale měla by fungovat podobně s jinými distribucemi s malými úpravami. V každé z následujících sekcí probereme změny potřebné k tomu, aby to fungovalo na jiných systémech.
Poznámka :Tato příručka přepíše existující .vimrc
konfigurační soubor, takže je užitečnější nastavit nový systém, který ještě nemá nakonfigurovaný Vim. Pokud máte existující konfigurační soubor Vim, před spuštěním této příručky jej zazálohujte.
Chcete-li spustit tuto příručku, musíte nainstalovat Ansible. Ve Fedoře můžete nainstalovat Ansible pomocí dnf
, takto:
$ sudo dnf install -y ansible
Další podrobnosti o možnostech instalace Ansible naleznete v Průvodci instalací Ansible.
1. Spuštění příručky
Vytvořte si soubor Ansible playbook vim-config.yaml
a upravte jej pomocí svého oblíbeného textového editoru. Pokud jste v Ansible noví, podívejte se na tento odkaz na příručku, kde se o ní dozvíte více.
$ vi vim-config.yaml
[ Také by se vám mohlo líbit: Úvod do editoru vi ]
Nyní spusťte definici playbooku zadáním názvu a seznamu cílových hostitelů. V tomto případě budeme cílit pouze na localhost
pro místní konfiguraci Vimu.
- name: Config Vim with plugins
hosts: localhost
Dále nastavte gather_facts: yes
možnost shromažďovat fakta o vašem systému. Budete to potřebovat pro přístup k proměnným prostředí v dalším kroku:
gather_facts: yes
Nakonec nastavte globální volbu become: no
k označení, že tyto úkoly obecně nevyžadují eskalaci oprávnění. Lokálně nastavíme eskalaci oprávnění pro jednotlivé úkoly, které to vyžadují, jako je instalace systémových balíčků.
become: no
Dále definujte některé užitečné proměnné.
2. Definování proměnných
Konfigurace Vim a Vim pluginů vyžaduje přidání obsahu do $HOME/.vim
a do $HOME/.vimrc
konfigurační soubor. Abychom zajistili, že tyto hodnoty použijeme konzistentně a nebudeme je mnohokrát přepisovat, definujme dvě proměnné pro uložení jejich hodnot:
vars:
vim_dir: "{{ ansible_env.HOME }}/.vim"
vimrc: "{{ ansible_env.HOME }}/.vimrc"
Všimněte si, že používáme ansible_env.HOME
proměnná fakt pro načtení hodnoty $HOME
proměnná prostředí. Další informace o získávání proměnných prostředí naleznete v dokumentaci.
Nyní začněme definovat úkoly, které playbook provádí.
3. Instalace požadovaných balíčků
Dalším krokem při vytváření playbooku je definování úloh, které bude playbook spouštět. Začněte tím, že poskytnete tasks:
parametr playbooku:
tasks:
Prvním úkolem je nainstalovat systémové balíčky vyžadované některými pluginy Vim, které nainstalujeme později. K jejich instalaci použijte modul balíčku a zadejte parametr become: yes
pro povolení eskalace oprávnění, která je vyžadována pro instalaci systémových balíčků:
- name: Install required packages
package:
name:
- vim-enhanced
- git
- powerline-fonts
- fzf
state: installed
become: yes
package
modul funguje v různých distribucích, ale názvy balíčků se liší. Tyto hodnoty jsou platné pro Fedoru 32. Pokud tuto příručku používáte v jiné distribuci, změňte názvy balíčků podle požadavků distribuce.
Dále vytvořte .vim
adresářová struktura.
4. Vytváření adresářů
Použijte souborový modul s parametrem state: directory
k vytvoření požadovaných adresářů. Vzhledem k tomu, že existují tři adresáře, spouštějte tento modul ve smyčce a vytvořte je všechny pomocí jediného úkolu:
- name: Ensure .vim/{autoload,bundle} directory exists
file:
path: "{{ item }}"
state: directory
recurse: no
mode: 0750
loop:
- "{{ vim_dir }}"
- "{{ vim_dir }}/autoload"
- "{{ vim_dir }}/bundle"
Všimněte si, že používáme vim_dir
proměnnou, kterou jsme dříve definovali, aby reprezentovala .vim
adresář. Používáme syntaxi Jinja2 {{ vim_dir }}
.
Nyní, když jsou adresáře na svém místě, musíte si stáhnout Pathogen.
5. Stahování patogenu
Pro tento příklad použijme Vim-Pathogen jako správce pluginů Vim. Chcete-li jej nainstalovat pomocí Ansible, použijte modul get_url ke stažení souboru pluginu přímo do jeho cílového adresáře:
- name: Ensure Pathogen is in place
get_url:
dest: "{{ vim_dir }}/autoload/pathogen.vim"
url: https://tpo.pe/pathogen.vim
Dále nasaďte požadované pluginy.
6. Nasazení pluginů z Git
Jakmile je Pathogen nainstalován, pojďme pomocí modulu git nasadit požadované pluginy naklonováním jejich úložiště GitHub do cílového adresáře. Podobně jako při vytváření adresářů použijte smyčku ke klonování všech úložišť s jediným úkolem:
- name: Deploy plugins
git:
dest: "{{ vim_dir }}/bundle/{{ item.name }}"
repo: "{{ item.url }}"
clone: yes
update: yes
recursive: no
loop:
- name: vim-airline
url: https://github.com/vim-airline/vim-airline
- name: nerdtree
url: https://github.com/preservim/nerdtree
- name: fzf-vim
url: https://github.com/junegunn/fzf.vim
- name: vim-gitgutter
url: https://github.com/airblade/vim-gitgutter
- name: vim-fugitive
url: https://github.com/tpope/vim-fugitive
- name: vim-floaterm
url: https://github.com/voldikss/vim-floaterm
Všimněte si, že jako vstup pro cyklus používáme seznam slovníků a jejich hodnoty používáme se syntaxí {{ item.KEY }}
kde je to požadováno jako vstup pro parametry modulu.
Dále zkopírujte základní konfigurační soubor pro Vim.
7. Kopírování počátečního konfiguračního souboru
Jako poslední úkol použijte kopírovací modul ke zkopírování základního konfiguračního souboru pro Vim. Nejprve vytvořte konfigurační soubor v podadresáři files
:
$ mkdir files
$ vim files/vimrc
execute pathogen#infect()
syntax on
filetype plugin indent on
colo darkblue
" Configuration vim Airline
set laststatus=2
let g:airline#extensions#tabline#enabled=1
let g:airline_powerline_fonts=1
" Configuration NERDTree
map <F5> :NERDTreeToggle<CR>
" Configuration floaterm
let g:floaterm_keymap_toggle = '<F12>'
let g:floaterm_width = 0.9
let g:floaterm_height = 0.9
" Configuration Vim.FZF
let g:fzf_preview_window = 'right:50%'
let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } }
Poté použijte copy
modul pro zkopírování souboru do cílového umístění:
- name: Ensure .vimrc config in place
copy:
src: vimrc
dest: "{{ vimrc }}"
backup: yes
mode: 0640
Všimněte si, že nemusíte zadávat adresář files
v src
cesta. Ve výchozím nastavení Ansible hledá soubory ke kopírování v tomto podadresáři.
Nakonec spusťte playbook.
8. Dát to všechno dohromady
Vaše příručka je hotová. Pro informaci zde je kompletní příručka:
- name: Config Vim with plugins
hosts: localhost
gather_facts: yes
become: no
vars:
vim_dir: "{{ ansible_env.HOME }}/.vim"
vimrc: "{{ ansible_env.HOME }}/.vimrc"
tasks:
- name: Install required packages
package:
name:
- vim-enhanced
- git
- powerline-fonts
- fzf
state: installed
become: yes
tags:
- install_packages
- name: Ensure .vim/{autoload,bundle} directory exists
file:
path: "{{ item }}"
state: directory
recurse: no
mode: 0750
loop:
- "{{ vim_dir }}"
- "{{ vim_dir }}/autoload"
- "{{ vim_dir }}/bundle"
- name: Ensure Pathogen is in place
get_url:
dest: "{{ vim_dir }}/autoload/pathogen.vim"
url: https://tpo.pe/pathogen.vim
- name: Deploy plugins
git:
dest: "{{ vim_dir }}/bundle/{{ item.name }}"
repo: "{{ item.url }}"
clone: yes
update: yes
recursive: no
loop:
- name: vim-airline
url: https://github.com/vim-airline/vim-airline
- name: nerdtree
url: https://github.com/preservim/nerdtree
- name: fzf-vim
url: https://github.com/junegunn/fzf.vim
- name: vim-gitgutter
url: https://github.com/airblade/vim-gitgutter
- name: vim-fugitive
url: https://github.com/tpope/vim-fugitive
- name: vim-floaterm
url: https://github.com/voldikss/vim-floaterm
- name: Ensure .vimrc config in place
copy:
src: vimrc
dest: "{{ vimrc }}"
backup: yes
mode: 0640
Nyní uložte soubor a zavřete textový editor.
Spusťte playbook pomocí ansible-playbook
příkaz a název playbooku. Protože tato příručka cílí na localhost
pouze inventura není striktně vyžadována. Stále si můžete jeden vytvořit. Protože jeden z úkolů vyžaduje eskalaci oprávnění, zadejte parametr -K
zadejte své sudo
heslo, které umožňuje Ansible provádět tyto úkoly.
Poznámka :Zálohujte existující .vimrc
konfiguračního souboru před spuštěním této příručky.
$ ansible-playbook -K vim-config.yaml
BECOME password:
PLAY [Config Vim with plugins] *************************************
TASK [Gathering Facts] *********************************************
ok: [localhost]
TASK [Install required packages] ***********************************
changed: [localhost]
TASK [Ensure .vim/{autoload,bundle} directory exists] **************
changed: [localhost] => (item=/home/ricardo/.vim)
changed: [localhost] => (item=/home/ricardo/.vim/autoload)
changed: [localhost] => (item=/home/ricardo/.vim/bundle)
TASK [Ensure Pathogen is in place] *********************************
changed: [localhost]
TASK [Deploy plugins] **********************************************
changed: [localhost] => (item={'name': 'vim-airline', 'url': 'https://github.com/vim-airline/vim-airline'})
changed: [localhost] => (item={'name': 'nerdtree', 'url': 'https://github.com/preservim/nerdtree'})
changed: [localhost] => (item={'name': 'fzf-vim', 'url': 'https://github.com/junegunn/fzf.vim'})
changed: [localhost] => (item={'name': 'vim-gitgutter', 'url': 'https://github.c
changed: [localhost] => (item={'name': 'vim-fugitive', 'url': 'https://github.com/tpope/vim-fugitive'})
changed: [localhost] => (item={'name': 'vim-floaterm', 'url': 'https://github.com/voldikss/vim-floaterm'})
TASK [Ensure .vimrc config in place] *******************************
changed: [localhost]
PLAY RECAP *********************************************************
localhost : ok=5 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Nyní můžete otestovat svou novou konfiguraci Vim spuštěním vim
:
[ Potřebujete více o Ansible? Absolvujte bezplatný kurz technického přehledu od společnosti Red Hat. Ansible Essentials:Jednoduchost v technickém přehledu automatizace. ]
Co bude dál?
Vytvořili jste příručku pro automatizaci nasazení základní konfigurace Vim se šesti užitečnými zásuvnými moduly pro systémové správce. Pokud chcete použít stejnou příručku k nasazení dalších pluginů, přidejte je do seznamu smyček v Deploy plugins
úkoly. Také přidejte všechny požadované systémové balíčky do Install required packages
úkoly.
Pomocí této příručky můžete rychle nasadit a aktualizovat konfiguraci Vim pomocí principů Infrastructure as Code.
Další informace o Ansible naleznete v jeho oficiální dokumentaci.