【FreeBSD】pkgで普段使うサブコマンド達

僕が実際に使ったpkgのサブコマンド達。きっと随時更新。

各表のコマンド欄において、以下のルールで記載。

  • <>で囲っているものは、必須の引数
  • []で囲っているものは、必須ではない引数
  • <pkg-name>は基本的に複数並べてOK(pkg install vim emacsなど)

リモートパッケージの検索

コマンド 説明
pkg search <pattern> <pattern>を含むパッケージ一覧(名前とコメント)を表示
pkg search <pattern> <pattern>を含むパッケージ一覧(名前とコメント)を表示
pkg search -q <pattern> <pattern>を含むパッケージ一覧(名前のみ)を表示
pkg search -d <pattern> <pattern>を含むパッケージが依存するパッケージ一覧を表示
pkg search -f <pattern> <pattern>を含むパッケージの詳細情報を表示
pkg search -D <pattern> <pattern>を含むパッケージの概要を表示

パッケージのインストールと削除

コマンド 説明
pkg install <pkg-name> 指定パッケージをインストール
pkg delete <pkg-name> 指定パッケージを削除
pkg autoremove 被依存がなくなり不要になったパッケージを削除
pkg clean キャッシュしている古いバージョンのパッケージを削除

パッケージの更新制御

コマンド 説明
pkg version パッケージが更新可能か確認(=:更新不要 / <:更新あり / ?:不明)
pkg version -l '<' 更新可能なパケージだけリストアップ
pkg update データベースの更新(更新できずに困った時は-fオプション)
pkg upgrade [pkg-name] パッケージを更新
pkg upgrade -n [pkg-name] パッケージ更新の予行演習(実際には更新しない)
pkg lock <pkg-name> パッケージの更新を抑制(インストール済みバージョンで固定する)
pkg unlock <pkg-name> パッケージの更新を抑制を解除

基本的に全パッケージの更新は以下で良いかと。

> pkg update && pkg upgrade

インストール済みパッケージの情報取得

コマンド 説明
pkg info インストール済みのパッケージの一覧を表示
pkg info [pkg-name] パッケージの詳細情報を表示
pkg info -D <pkg-name> インストール時のメッセージ(設定例など)を表示
pkg info -d <pkg-name> 指定パッケージが依存しているパッケージ一覧を表示
pkg info -r <pkg-name> 指定パッケージに依存しているパッケージ一覧を表示
pkg info -k [pkg-name] ロックされているか否かを表示
pkg list <pkg-name> 指定パッケージでインストールしたファイル一覧を表示
pkg which <path/to/file> 指定ファイルがどのパッケージでインストールされたか表示

確認環境

   
PC Thinkpad X1 Carbon 2nd Gen
OS FreeBSD 12.1-RELEASE-p2

参考

【FreeBSD】ある日突然、画面解像度が低くなった

最近、FreeBSDを起動したら、画面解像度がデフォルト状態の低解像度に戻ったことがあった。

いつの間にか/boot/modules以下のドライバがごっそり消えていたっぽい。

以下のコマンドで再インストールすればOK。
(詳細は【FreeBSD】画面の解像度を上げたい - HacoLabを見てね)

> pkg instal ldrm-kmod

何トリガでこんなことになったのか分かっていない。

誤操作?(コマンド履歴にはないけど)
pkgのアップデート?
BSDのアップデート?

原因が分かっていない以上、またいつ起こるとも限らない。
突然、解像度が低くなったらまずチェックしてみましょ。

以上。

【FreeBSD】dein.vimではじめるNeovimプラグイン管理

NeovimはVim同様にプラグインを通して様々な機能を拡張できる。

でもプラグインを手動でインストールするのはめんどい。

dein.vimというプラグインを管理する為のプラグインを使おう。

確認環境

   
PC Thinkpad X1 Carbon 2nd Gen
OS FreeBSD 12.1-RELEASE-p1
Neovim NVIM v0.4.3
Python Python 3.7.6
Ruby ruby 2.6.5p114
Node.js v13.3.0

やること

ここでは、以下について説明する。

dein.vimを入れる前に、プラグインの開発によく使われる言語の実行環境を入れておく。
これは実際に使うプラグインで必要になったときに実施すればOK。

ただ、今回お試しでインストールするdeopleteにはPython3が必要。
deopleteを入れてみたい人は、下の2つの手順は実施してね。

  • 1.1 Pythonのインストール
  • 1.4 Neovimとの連携確認

1. よく使われる開発言語の実行環境インストール

1. Pythonのインストール

下のコマンドを管理者権限で実行してね。

> pkg install python27 python37     # Python本体
> pkg install py27-pip py37-pip     # Python2のパッケージ管理ツール
> pip-2.7 install pynvim            # Neovimとの通信ライブラリ(Python2)
> pip-3.7 install pynvim            # Neovimとの通信ライブラリ(Python3)

ちなみに通信ライブラリのアップデートは下のコマンド。

> pip-2.7 install -U pynvim
> pip-3.7 install -U pynvim

2. Rubyのインストール

下のコマンドを管理者権限で実行してね。

> pkg install ruby ruby-gem26   # Rubyとパッケージ管理ツール
> gem install neovim            # Neovimとの通信ライブラリ

ちなみに通信ライブラリのアップデートは下のコマンド。

> gem update neovim

3. Node.jsのインストール

下のコマンドを管理者権限で実行してね。

> pkg install node           # Node.js(パッケージ管理ツールもセット)
> npm install -g neovim      # Neovimとの通信ライブラリ

ちなみに通信ライブラリのアップデートは下のコマンド。

> npm update -g neovim

4. Neovimとの連携確認

各実行環境をインストールしたら、Neovimを起動して:checkhealthを実行しよう。
参考までに僕の環境での実行結果は以下。

## Python 2 provider (optional)
  - INFO: `g:python_host_prog` is not set.  Searching for python2.7 in the environment.
  - INFO: Executable: /usr/local/bin/python2.7
  - INFO: Python version: 2.7.17
  - INFO: pynvim version: 0.4.1
  - OK: Latest pynvim is installed.

## Python 3 provider (optional)
  - INFO: `g:python3_host_prog` is not set.  Searching for python3.7 in the environment.
  - INFO: Executable: /usr/local/bin/python3.7
  - INFO: Python version: 3.7.6
  - INFO: pynvim version: 0.4.1
  - OK: Latest pynvim is installed.

## Ruby provider (optional)
  - INFO: Ruby: ruby 2.6.5p114 (2019-10-01 revision 67812) [amd64-freebsd12]
  - INFO: Host: /usr/local/bin/neovim-ruby-host
  - OK: Latest "neovim" gem is installed: 0.8.1

## Node.js provider (optional)
  - INFO: Node.js: v13.3.0
  - INFO: Neovim node.js host: /usr/local/lib/node_modules/neovim/bin/cli.js
  - OK: Latest "neovim" npm/yarn package is installed: 4.8.0

もし、インストールしたPythonやRubyが見つからない旨のERRが出ていたら、
init.vimで下のような設定を追記すればいいかも。
(パスは各環境に合わせて変更してね)

let g:python_host_prog='/usr/local/bin/python2.7'
let g:python3_host_prog='/usr/local/bin/python3.7'
let g:ruby_host_prog='/usr/local/bin/ruby'
let g:node_host_prog='/usr/local/bin/node'

もし、対象言語のサポートを無効にしたい場合は、下の設定で良さげ。

let g:loaded_python_provider=0      # Pythno2のサポート無効化
let g:loaded_python3_provider=0     # Pythno3のサポート無効化
let g:loaded_ruby_provider=0        # Rubyのサポート無効化
let g:loaded_node_provider=0        # Node.jsのサポートを無効化

いずれもinit.vimの最初の方に追記すること。
追記したらNeovimを再起動して、もう一度:checkhealthを実行して確認しよう。

2. dein.vimの設定とインストール

それではdein.vim本体をインストールする。

と、その前にgitは予めインストールしておいてね。
(管理者権限で実行してね)

> pkg intall git

1. init.vimの修正

下のコードを~/.config/nvim/init.vimに追記して、Neovimを再起動すればOK。

4,5行目は各自好きなパスを指定して下さいまし。

これでNeovim起動時に、dein.vim本体と指定のプラグインを自動でインストールしてくれる。

2. dein.vim関連のディレクトリ/ファイル構成

上のコードだと、下のようなディレクトリ/ファイル構成になる。

~/.config/nvim
|-- init.vim        # Neovim設定ファイル
|-- dein.toml       # プラグインの登録ファイル
|-- plugins/*.vim   # 各プラグインの設定ファイル(必要であれば)
~/.cache/nvim/dein/
|-- repos/*         # 各プラグインをインストールするディレクトリ
|-- repos/github.com/Shougo/dein.vim    # dein.vimプラグイン本体

3. プラグインの登録とインストール

プラグインをインストールするには、dein.tomlを編集して必要なプラグインを登録する。

ここでは、入力補完プラグインのdeopleteをインストールしてみる。

1. dein.tomlの修正

dein.tomlに下のコードを追記しよう。
deopletecontext_filetype.vimに依存しているので、こちらも一緒にインストールする。

追記したら、Neovimを再起動してみよう。
起動時に上の2つのプラグインがインストールされるはずだ。
インストールが終わったら、Neovimを再起動して、適当なファイルを開いてみよう。

deopleteがちゃんと動いていれば、Insertモードで2文字以上入力したときに、補完候補が表示されるはずだ。

2. 各プラグインの設定を別ファイルにする場合

プラグインが増えてくると、dein.tomlが長くなってゴチャゴチャしてくる。
それが嫌な人は、先程のhook_addに書いた設定を別ファイルにするといい。

まず下のように、sourceで任意のファイルを指定する。

hook_add = '''
source ~/.config/nvim/plugins/deoplete.rc.vim
'''

そして、sourceで読み込むファイルに対象プラグインの設定を書けばOK。

let g:deoplete#enable_at_startup = 2
let g:deoplete#auto_complete_delay = 0
let g:deoplete#auto_complete_start_length = 2
let g:deoplete#enable_camel_case = 0
let g:deoplete#enable_ignore_case = 0
let g:deoplete#enable_refresh_always = 0
let g:deoplete#enable_smart_case = 1
let g:deoplete#file#enable_buffer_path = 1
let g:deoplete#max_list = 1000

4. dein.tomlに記載するオプション

dein.tomlに指定するオプションでわりと見かけるものをご紹介。
repoは必須。
それ以外は、各プラグインのマニュアルを読んで必要に応じて指定する感じ。

設定項目 設定内容 設定値の例など
repo プラグインの公開リポジトリ repo='Shougo/deoplete.nvim'
depends 依存しているプラグイン depends='context_filetype.vim'
frozen 自動更新しない場合に1を指定(更新されない古いプラグインなど) frozen=1
build プラグインインストールコマンド bash install.sh
if プラグインを登録する条件を指定 if='has("nvim")'
if=0
on_event プラグインをロードするタイミング(Vimのイベント) on_event='InsertEnter'
on_event=['BufEnter','WinEnter']
on_ft プラグインをロードするFileType on_ft='rust'
on_ft=['css','html','php']
on_if プラグインロード時にロード条件を追加で指定
デフォルトはBufRead,BufNewFile,VimEnter,FileTypeイベント時、
on_event指定時はそのイベント発生時に判定とのこと
on_if='winnr("$")>1'
hook_add ロード時に実行するVimスクリプト hook_add='g:variiable=value'
hook_add='source path/to/file.vim'

その他のオプションについては、deinのマニュアルを見てね。

5. プラグインの更新

上で紹介したinit.vimの設定では、下のコードでプラグインの更新関数を割り当てている。

" Update plugins (bind keymap)
" ----------------------------
nnoremap <Leader>du :call dein#update()<CR>

各自好きに割り当てて下さいな。

6. プラグインの削除

dein.tomlから対象プラグインの記載をコメントアウトか削除すればい。
Neovim起動時に記載を削除したプラグインのインストールファイル(プラグインのコードなど)も削除するようにしている。

また、if=0オプションを指定した場合も同様に削除する。

自動でインストールファイルを自動で削除したくない場合は、init.vimの下のコードを削除するなり、関数化してキーに割り当てるなりしてねと。

" Remove plugins
" ----------------------------
let s:removed_plugins = dein#check_clean()
if len(s:removed_plugins) > 0
    call map(s:removed_plugins, "delete(v:val, 'rf')")
    call dein#recache_runtimepath()
endif

最後に

これで手動に比べるとだいぶ楽にパッケージ管理が出来るようになったと思う。

あとは下のサイトさんなどを参考に手始めに入れるプラグインを探してみてはいかがだろうか。

参考