Vimを使う - 日本語の「一文」を選択する方法(visへの統合)

【連載】

にわか管理者のためのLinux運用入門

【第258回】Vimを使う - 日本語の「一文」を選択する方法(visへの統合)

[2020/12/01 08:00]後藤大地 ブックマーク ブックマーク

「vis」で日本文も英文も選択できるようにしたい

前回、一文をビジュアル選択する方法として「vis」と入力する方法を紹介した。ただし、この機能は英文に対しては機能するものの、日本文に対しては期待通りに動作しない。これを解消するために「viS」というちょっともじったショートカットキーで動作する日本文向けの設定を作成して見せた。

しかし、である。Vimはそもそもショートカットキーがたくさんある。にもかかわらず、独自のショートカットキーを導入していくと、どんどんわけがわからなくなってくるのだ。できれば「vis」が英文に対しても日本文に対しても機能してくれることが望ましい。ショートカットキーの数は最低限にしておかないと、人間のほうが忘れてしまうのである。

アプローチはいくつかあるのだが、シンプルでかつ効果的な設定方法で済ませたい。複雑な設定にすると後で書き換えようとしたときに苦労するのは目に見えている。ここで、状況を整理してみよう。

  • 「vis」で英文も日本文も良い具合に選択してほしい
  • 優先度は日本文のほうが高い
  • 英文での利用頻度は低い


上記条件を考慮すると、前回作った「viS」を英文に対しても機能するように拡張した後、「vis」として上書きしてやればよい、という感じになってくる。「nnoremap」で比較的影響範囲を減らしておけばよいだろう。場合によっては適用する範囲をさらに絞り込むなどすれば現実的に利用できるはずだ。

ということで、先に今回の設定の完成形をお見せしておこう。

nnoremap vis ?\(。\\|\.\\|^$\\|>\)<CR>lv/\(。\\|\.\\|^$\\|<\\|:\)<CR>

「『?』で1つ前の一文の末尾へ移動し、1文字進めて(l)ビジュアル選択(v)を開始し、『/』で対象文の末尾へ移動する」、という内容になっている。前方検索と後方検索がわかりにくいので、次にそれぞれを整理しておく。

文字 正規表現
. .
空行 ^$
タグ >
文字 正規表現
. .
空行 ^$
タグ <
コロン :

ここで紹介した方法は、これまで連載で説明してきた方法を使っているだけなので、ゆっくり読めば意味はわかるはずだ。この設定はデフォルトの「vis」の動きを正確には再現していない。あくまでも「似た」動作をさせているだけだ。不備があれば、それに合わせて書き換えてもらえればと思う。ただし、あまりこだわり過ぎないことをお薦めしたい。まずはそれなりに動けばよいだろう。

動作確認

では動作確認を行ってみよう。次に日本文で試した例を掲載しておく。それぞれカーソルのある一文が選択対象として選択されていることを確認できる。

「vis」を実行

実行結果

visを実行

実行結果

「vis」を実行

実行結果

次に英文で同じことを確認してみよう。Vimがデフォルトで提供している「vis」に比べるとちょっとばかり選択範囲が甘くなるのだが、これくらい動いてくれればよいだろう。

「vis」を実行

実行結果

「vis」を実行

実行結果

「viS」のようなオリジナルショートカットは、作ったばかりのときはよいのだが、時間が経つと忘れて「vis」と入力していたりする。やはり、デフォルトのコマンドで日本文もカバーしてくれるほうが助かるのだ。

付録: 使っている設定ファイルとセットアップ方法

プラグインを使うためにDeinをセットアップする方法

mkdir -p ~/.cache/dein
cd ~/.cache/dein/
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
sh ./installer.sh .
rm ./installer.sh

本連載で使っている~/.vimrcファイル

"dein Scripts=============================
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=~/.cache/dein/./repos/github.com/Shougo/dein.vim

" Required:
if dein#load_state('~/.cache/dein/.')
  call dein#begin('~/.cache/dein/.')

  " Let dein manage dein
  " Required:
  call dein#add('~/.cache/dein/./repos/github.com/Shougo/dein.vim')

  " Add or remove your plugins here
  call dein#add('junegunn/seoul256.vim')
  call dein#add('vim-airline/vim-airline')
  call dein#add('vim-airline/vim-airline-themes')
  call dein#add('preservim/nerdtree')
  call dein#add('tpope/vim-commentary')
  call dein#add('tpope/vim-fugitive')
  call dein#add('fholgado/minibufexpl.vim')
  call dein#add('dense-analysis/ale')
  call dein#add('junegunn/fzf', {'build': './install --all'})
  call dein#add('junegunn/fzf.vim')
  call dein#add('sheerun/vim-polyglot')
  call dein#add('junegunn/vim-easy-align')

  " Required:
  call dein#end()
  call dein#save_state()
endif

" Required:
filetype plugin indent on
syntax enable

" If you want to install not installed plugins on startup.
if dein#check_install()
  call dein#install()
endif

" seoul256
let g:seoul256_background = 233
colo seoul256

" vim-airline
let g:airline_powerline_fonts = 1
let g:airline_theme = 'molokai'

" NERDTree
"  <C-o> open NERDTree
nnoremap <silent> <C-o> :NERDTreeToggle<CR>

" minibufexpl
nnoremap <silent> bn :<C-u>:bnext<CR>
nnoremap <silent> b1 :<C-u>:b1<CR>
nnoremap <silent> b2 :<C-u>:b2<CR>
nnoremap <silent> b3 :<C-u>:b3<CR>
nnoremap <silent> b4 :<C-u>:b4<CR>
nnoremap <silent> b5 :<C-u>:b5<CR>
nnoremap <silent> b6 :<C-u>:b6<CR>
nnoremap <silent> b7 :<C-u>:b7<CR>
nnoremap <silent> b8 :<C-u>:b8<CR>
nnoremap <silent> b9 :<C-u>:b9<CR>

" fzf
nnoremap <silent> fzf :Files<CR>
nnoremap <silent> ls :Buffers<CR>

" vim-easy-align
xmap ga <Plug>(EasyAlign)
nmap ga <Plug>(EasyAlign)

"End dein Scripts=========================

set number
syntax on
set whichwrap=b,s,[,],<,>,~,h,l
set cursorline
set incsearch
set hlsearch
set ignorecase

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします
注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
ミッションステートメント
教えてカナコさん! これならわかるAI入門
AWSではじめる機械学習 ~サービスを知り、実装を学ぶ~
対話システムをつくろう! Python超入門
Kubernetes入門
SAFeでつくる「DXに強い組織」~企業の課題を解決する13のアプローチ~
PowerShell Core入門
AWSで作るマイクロサービス
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

会員登録(無料)

ページの先頭に戻る