GNU/Linux >> Belajar Linux >  >> Linux

Cara menggunakan Ansible untuk mengonfigurasi Vim

Dalam artikel Lima plugin Vim teratas untuk sysadmin, saya membahas lima plugin plus bonus yang membuat hidup lebih mudah bagi sysadmin saat menggunakan Vim. Artikel ini akan memperluasnya dengan mengembangkan buku pedoman Ansible untuk mengonfigurasi lingkungan Vim awal menggunakan plugin tersebut.

Buku pedoman ini bekerja pada sistem Fedora Linux tetapi harus bekerja sama dengan distribusi lain dengan membuat sedikit modifikasi. Di setiap bagian berikut, kita akan membahas perubahan yang diperlukan untuk membuatnya berfungsi di sistem lain.

Catatan :Buku pedoman ini menimpa .vimrc yang ada file konfigurasi, jadi akan lebih berguna untuk menyiapkan sistem baru yang belum memiliki konfigurasi Vim. Jika Anda sudah memiliki file konfigurasi Vim, buat cadangannya sebelum menjalankan buku pedoman ini.

Untuk menjalankan buku pedoman ini, Anda harus menginstal Ansible. Di Fedora, Anda dapat menginstal Ansible menggunakan dnf , seperti ini:

$ sudo dnf install -y ansible

Untuk detail selengkapnya tentang opsi penginstalan yang mungkin, lihat Panduan Penginstalan yang Mungkin.

1. Memulai buku pedoman

Buat file playbook Ansible Anda vim-config.yaml dan edit menggunakan editor teks favorit Anda. Jika Anda baru mengenal Ansible, periksa tautan playbook ini untuk mempelajarinya lebih lanjut.

$ vi vim-config.yaml

[ Anda mungkin juga menyukai: Pengantar editor vi ]

Sekarang, mulailah definisi buku pedoman Anda dengan memberikan nama dan daftar host target. Dalam hal ini, kami hanya akan menargetkan localhost untuk mengonfigurasi Vim secara lokal.

- name: Config Vim with plugins
  hosts: localhost

Selanjutnya, atur gather_facts: yes opsi untuk mengumpulkan fakta tentang sistem Anda. Anda akan memerlukannya untuk mengakses variabel lingkungan di langkah berikutnya:

  gather_facts: yes

Terakhir, atur opsi global become: no untuk menunjukkan bahwa, secara umum, tugas ini tidak memerlukan eskalasi hak istimewa. Kami akan menyetel eskalasi hak istimewa secara lokal untuk tugas individu yang memerlukannya, seperti menginstal paket sistem.

  become: no

Selanjutnya, tentukan beberapa variabel yang berguna.

2. Mendefinisikan variabel

Mengonfigurasi plugin Vim dan Vim memerlukan penambahan konten ke $HOME/.vim direktori dan ke $HOME/.vimrc berkas konfigurasi. Untuk memastikan bahwa kita menggunakan nilai-nilai ini secara konsisten dan menghindari mengetik ulang berkali-kali, mari kita definisikan dua variabel untuk menyimpan nilainya:

  vars:
    vim_dir: "{{ ansible_env.HOME }}/.vim"
    vimrc: "{{ ansible_env.HOME }}/.vimrc"

Perhatikan bahwa kita menggunakan ansible_env.HOME variabel fakta untuk mengambil nilai $HOME variabel lingkungan. Untuk informasi lebih lanjut tentang mendapatkan variabel lingkungan, lihat dokumentasi.

Sekarang, mari mulai mendefinisikan tugas yang dijalankan oleh buku pedoman.

3. Menginstal paket yang diperlukan

Langkah selanjutnya dalam membuat playbook adalah menentukan tugas-tugas yang akan dijalankan playbook. Mulailah dengan memberikan tasks: parameter buku pedoman:

  tasks:

Karena tugas pertama adalah menginstal paket sistem yang diperlukan oleh beberapa plugin Vim yang akan kita instal nanti. Gunakan modul paket untuk menginstalnya dan berikan parameter become: yes untuk mengaktifkan eskalasi hak istimewa, yang diperlukan untuk menginstal paket sistem:

    - name: Install required packages
      package:
        name:
          - vim-enhanced
          - git
          - powerline-fonts
          - fzf
        state: installed
      become: yes

package modul bekerja di distribusi yang berbeda, tetapi nama paketnya berbeda. Nilai ini berlaku untuk Fedora 32. Jika Anda menjalankan buku pedoman ini di distribusi yang berbeda, ubah nama paket sesuai dengan persyaratan distribusi Anda.

Selanjutnya, buat .vim struktur direktori.

4. Membuat direktori

Gunakan modul file dengan parameter state: directory untuk membuat direktori yang diperlukan. Karena ada tiga direktori, jalankan modul ini dalam satu lingkaran untuk membuat semuanya dengan satu tugas:

    - 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"

Perhatikan bahwa kita menggunakan vim_dir variabel yang kita definisikan sebelumnya untuk mewakili .vim direktori. Kami menggunakan sintaks Jinja2 {{ vim_dir }} .

Sekarang direktori sudah ada, Anda perlu mengunduh Pathogen.

5. Mengunduh Patogen

Untuk contoh ini, mari gunakan Vim-Pathogen sebagai pengelola plugin Vim. Untuk menginstalnya menggunakan Ansible, terapkan modul get_url untuk mengunduh file plugin langsung ke direktori tujuannya:

    - name: Ensure Pathogen is in place
      get_url:
        dest: "{{ vim_dir }}/autoload/pathogen.vim"
        url: https://tpo.pe/pathogen.vim

Selanjutnya, terapkan plugin yang diperlukan.

6. Menyebarkan plugin dari Git

Setelah Pathogen terinstal, mari gunakan modul git untuk menerapkan plugin yang diperlukan dengan mengkloning repositori GitHub mereka ke direktori tujuan. Mirip dengan membuat direktori, gunakan loop untuk mengkloning semua repositori dengan satu tugas:

    - 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

Perhatikan bahwa kita menggunakan daftar kamus sebagai input untuk loop dan menggunakan nilainya dengan sintaks {{ item.KEY }} jika diperlukan sebagai masukan untuk parameter modul.

Selanjutnya, salin file konfigurasi dasar untuk Vim.

7. Menyalin file konfigurasi awal

Sebagai tugas terakhir, gunakan modul salin untuk menyalin file konfigurasi dasar untuk Vim. Pertama, buat file konfigurasi di bawah sub-direktori 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  }  }

Kemudian, gunakan copy modul untuk menyalin file ke tujuan target:

    - name: Ensure .vimrc config in place
      copy:
        src: vimrc
        dest: "{{ vimrc }}"
        backup: yes
        mode: 0640

Perhatikan bahwa Anda tidak perlu menentukan direktori files di src jalur. Secara default, Ansible mencari file untuk disalin di sub-direktori ini.

Terakhir, jalankan buku pedoman.

8. Menyatukan semuanya

Buku pedoman Anda selesai. Untuk referensi, inilah pedoman lengkapnya:

- 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

Sekarang, simpan file Anda, lalu tutup editor teks.

Jalankan playbook menggunakan ansible-playbook perintah dan nama buku pedoman. Karena buku pedoman ini menargetkan localhost hanya, inventaris tidak benar-benar diperlukan. Anda masih dapat membuatnya. Juga, karena salah satu tugas memerlukan eskalasi hak istimewa, berikan parameter -K untuk mengetik sudo sandi, memungkinkan Ansible untuk menjalankan tugas-tugas tersebut.

Catatan :Cadangkan .vimrc yang ada file konfigurasi sebelum menjalankan playbook ini.

$ 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   

Anda sekarang dapat menguji konfigurasi Vim baru Anda dengan menjalankan vim :

[ Butuh lebih banyak tentang Ansible? Ikuti kursus tinjauan teknis gratis dari Red Hat. Ansible Essentials:Kesederhanaan dalam Tinjauan Teknis Otomasi. ] 

Apa selanjutnya?

Anda telah membuat buku pedoman untuk mengotomatiskan penerapan konfigurasi Vim dasar dengan enam plugin yang berguna untuk sysadmin. Jika Anda ingin menggunakan buku pedoman yang sama untuk menerapkan plugin tambahan, tambahkan plugin tersebut ke daftar loop di Deploy plugins tugas. Juga, tambahkan paket sistem yang diperlukan ke Install required packages tugas.

Dengan menggunakan buku pedoman ini, Anda dapat dengan cepat menerapkan dan memperbarui konfigurasi Vim Anda menggunakan Infrastruktur sebagai prinsip Kode.

Untuk informasi lebih lanjut tentang Ansible, lihat dokumentasi resminya.


Linux
  1. Bagaimana Cara Menggunakan `yang` Pada Perintah Aliased?

  2. Bagaimana Cara Menggunakan Jenis File Di Vim?

  3. Ubuntu 19.04 :Konfigurasikan vim

  1. Bagaimana saya mengonfigurasi Vim sebagai editor default saya di Linux

  2. Bagaimana saya menggunakan Ansible dan anacron untuk otomatisasi

  3. Konfigurasikan GIMP 2.10 untuk Menggunakan Pintasan Keyboard Photoshop (Cara)

  1. Cara Menginstal dan Menggunakan Ansible di Debian 11

  2. Cara menggunakan Ansible untuk menginstal dan mengkonfigurasi Redis 6 di Debian 11

  3. Cara mengkonfigurasi buruh pelabuhan untuk menggunakan proxy