GNU/Linux >> Linux の 問題 >  >> Linux

Ansibleを使用してVimを設定する方法

記事「システム管理者向けのトップ5のVimプラグイン」では、5つのプラグインに加えて、Vimを使用する際のシステム管理者の生活を楽にするボーナスについて説明しました。この記事では、Ansibleプレイブックを開発して、これらのプラグインを使用して初期Vim環境を構成することでさらに詳しく説明します。

このプレイブックはFedoraLinuxシステムで動作しますが、小さな変更を加えることで他のディストリビューションでも同様に動作するはずです。次の各セクションでは、他のシステムで機能させるために必要な変更について説明します。

:このプレイブックは既存の.vimrcを上書きします 構成ファイルなので、Vimがまだ構成されていない新しいシステムをセットアップする方が便利です。既存のVim構成ファイルがある場合は、このプレイブックを実行する前にバックアップしてください。

このプレイブックを実行するには、Ansibleをインストールする必要があります。 Fedoraでは、dnfを使用してAnsibleをインストールできます。 、このように:

$ sudo dnf install -y ansible

Ansibleインストールオプションの詳細については、Ansibleインストールガイドを確認してください。

1。プレイブックの開始

Ansibleプレイブックファイルvim-config.yamlを作成します お気に入りのテキストエディタを使用して編集します。 Ansibleを初めて使用する場合は、このPlaybookリンクで詳細を確認してください。

$ vi vim-config.yaml

[次のこともお勧めします:viエディタの概要]

次に、ターゲットホストの名前とリストを指定して、プレイブックの定義を開始します。この場合、localhostのみをターゲットにします Vimをローカルに設定します。

- name: Config Vim with plugins
  hosts: localhost

次に、gather_facts: yesを設定します システムに関する事実を収集するオプション。次のステップで環境変数にアクセスするには、これが必要になります:

  gather_facts: yes

最後に、グローバルオプションbecome: noを設定します 一般に、これらのタスクは特権の昇格を必要としないことを示します。システムパッケージのインストールなど、特権の昇格を必要とする個々のタスクに対して、ローカルで特権の昇格を設定します。

  become: no

次に、いくつかの有用な変数を定義します。

2。変数の定義

VimおよびVimプラグインを構成するには、$HOME/.vimにコンテンツを追加する必要があります ディレクトリと$HOME/.vimrcへ 構成ファイル。これらの値を一貫して使用し、何度も再入力しないようにするために、値を格納する2つの変数を定義しましょう。

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

ansible_env.HOMEを使用していることに注意してください $HOMEの値を取得するためのファクト変数 環境変数。環境変数の取得の詳細については、ドキュメントを参照してください。

それでは、プレイブックが実行するタスクの定義を始めましょう。

3。必要なパッケージのインストール

プレイブックを作成する次のステップは、プレイブックが実行するタスクを定義することです。 tasks: プレイブックパラメータ:

  tasks:

最初のタスクは、後でインストールするVimプラグインの一部に必要なシステムパッケージをインストールすることです。パッケージモジュールを使用してそれらをインストールし、パラメータbecome: yesを指定します システムパッケージのインストールに必要な特権昇格を有効にするには:

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

package モジュールはさまざまなディストリビューションで機能しますが、パッケージ名は異なります。これらの値はFedora32で有効です。このプレイブックを別のディストリビューションで実行している場合は、ディストリビューションの要件に応じてパッケージ名を変更してください。

次に、.vimを作成します ディレクトリ構造。

4。ディレクトリの作成

パラメータstate: directoryを指定してファイルモジュールを使用します 必要なディレクトリを作成します。ディレクトリは3つあるため、このモジュールをループで実行して、1つのタスクですべてのディレクトリを作成します。

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

vim_dirを使用していることに注意してください .vimを表すために前に定義した変数 ディレクトリ。 Jinja2構文を使用しています{{ vim_dir }}

ディレクトリが配置されたので、Pathogenをダウンロードする必要があります。

5。病原体のダウンロード

この例では、Vim-PathogenをVimプラグインマネージャーとして使用しましょう。 Ansibleを使用してインストールするには、get_urlモジュールを適用して、プラグインファイルを宛先ディレクトリに直接ダウンロードします。

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

次に、必要なプラグインをデプロイします。

6。 Gitからプラグインをデプロイする

Pathogenをインストールしたら、gitモジュールを使用して、GitHubリポジトリを宛先ディレクトリに複製することにより、必要なプラグインをデプロイしましょう。ディレクトリの作成と同様に、ループを使用して、単一のタスクですべてのリポジトリのクローンを作成します。

    - 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

辞書のリストをループの入力として使用し、それらの値を構文{{ item.KEY }}で使用していることに注意してください。 モジュールパラメータの入力として必要な場合。

次に、Vimの基本構成ファイルをコピーします。

7。初期設定ファイルのコピー

最後のタスクとして、コピーモジュールを使用してVimの基本構成ファイルをコピーします。まず、サブディレクトリ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  }  }

次に、copyを使用します ファイルをターゲットの宛先にコピーするモジュール:

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

ディレクトリfilesを指定する必要がないことに注意してください srcで 道。デフォルトでは、Ansibleはこのサブディレクトリでコピーするファイルを探します。

最後に、プレイブックを実行します。

8。すべてをまとめる

プレイブックが完成しました。参考までに、完全なプレイブックは次のとおりです。

- 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

次に、ファイルを保存してから、テキストエディタを閉じます。

ansible-playbookを使用してプレイブックを実行します コマンドとプレイブック名。このプレイブックはlocalhostを対象としているため ただ、在庫は厳密には必要ありません。引き続き作成できます。また、タスクの1つに特権の昇格が必要なため、パラメーター-Kを指定します。 sudoを入力します パスワード。Ansibleがこれらのタスクを実行できるようにします。

:既存の.vimrcをバックアップします このプレイブックを実行する前の構成ファイル。

$ 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   

vimを実行して、新しいVim構成をテストできるようになりました。 :

[Ansibleについてもっと知りたいですか? RedHatから無料の技術概要コースを受講してください。 Ansible Essentials:自動化の技術概要のシンプルさ。 ]

次は何ですか?

sysadmins用の6つの便利なプラグインを使用して、基本的なVim構成のデプロイを自動化するためのプレイブックを作成しました。同じプレイブックを使用して追加のプラグインをデプロイする場合は、それらをDeploy pluginsのループリストに追加します。 タスク。また、必要なシステムパッケージをInstall required packagesに追加します タスク。

このプレイブックを使用すると、InfrastructureasCodeの原則を使用してVim構成をすばやく展開および更新できます。

Ansibleの詳細については、公式ドキュメントを参照してください。


Linux
  1. エイリアスコマンドで`which`を使用する方法は?

  2. Vimでファイルタイプを使用する方法は?

  3. Ubuntu 19.04 :vim を構成する

  1. LinuxでVimをデフォルトのエディターとして設定する方法

  2. 自動化のためにAnsibleとanacronを使用する方法

  3. Photoshop のキーボード ショートカットを使用するように GIMP 2.10 を構成する (方法)

  1. Debian11にAnsibleをインストールして使用する方法

  2. Ansibleを使用してDebian11にRedis6をインストールして設定する方法

  3. プロキシを使用するように docker を構成する方法