記事「システム管理者向けのトップ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の詳細については、公式ドキュメントを参照してください。