GNU/Linux >> Znalost Linux >  >> Linux

Jak používat Ansible ke konfiguraci Vim

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.


Linux
  1. Jak nakonfiguruji Vim jako svůj výchozí editor v Linuxu

  2. Jak používat `který` u aliasovaného příkazu?

  3. Ubuntu 19.04:Konfigurace vim

  1. Jak používám Ansible a anacron pro automatizaci

  2. Jak používat Ansible k instalaci a konfiguraci Redis 6 na Debian 11

  3. jak používat pylint ve vim

  1. Jak používat typ souboru ve Vimu?

  2. Jak nakonfigurovat docker pro použití proxy

  3. Nakonfigurujte GIMP 2.10 tak, aby používal klávesové zkratky Photoshopu (jak na to)