1. HOME
  2. »
  3. ソフトウェア
  4. »
  5. テキストエディタ
  6. »
  7. Vim
  8. »
  9. Vimで括弧とクォーテーションの最強補完機能を自作しよう!

Vimで括弧とクォーテーションの最強補完機能を自作しよう!

普段、テキストエディタとして、私はVimを使っています。
括弧の補完機能を便利にしたいと思い、今回はそれを自作してみようと思います。

目次
  1. 今回作成する補完機能について
  2. カーソル前後の文字列を取得する関数
  3. アルファベット、数字、全角文字かどうかを判定する関数
  4. カーソルの左右に括弧があるかどうかを取得する関数

今回作成する補完機能について

今回作る、括弧やクォーテーションの補完機能は、だいたい次のようなふうになります。

Vimでの括弧やクォーテーションの補完機能の作り方
  • 括弧を入力したとき、対応した閉じ括弧を自動的に入力する
  • 閉じ括弧が入力されたとき、カーソルの後ろに閉じ括弧があれば、入力せずにカーソルを右に移動する
  • クォーテーションが入力されたとき、場合に応じて、入力せずにカーソルを右にずらしたり、2つ入力したりする
  • 改行されたとき、カーソルの前後に括弧があったら、括弧の中心の行にカーソルを移動して、インデントをつける
  • スペースキーが押されたとき、カーソルの前後に括弧があったら、スペースを2つ入力する
  • 削除キーが押されたとき、カーソル前後のスペースや括弧を同時に削除
  • 文字列を選択して括弧を入力することで、その文字列を括弧で挟む
  • 文字列を選択してクォーテーションを入力することで、その文字列をクォーテーションで挟む

では、順番に作っていきましょう。
まず最初のこのページでは、この補完機能を作るための便利な関数を作っていきます。

※今回はJavaScriptファイル(.js)で試しています。他の形式だと、動きが変わってしまったりします。

カーソル前後の文字列を取得する関数

補完機能を作るためには、カーソルの前後の文字がなにか、が重要になります。

そこで、カーソル前後の文字列を取得する関数を作っていきましょう。
まずは、カーソルの次の文字列を取得する関数です。

"カーソルの次の文字列を取得(引数は取得したい文字数)
function! GetNextString(length) abort
	let l:str = ""
	for i in range(0, a:length-1)
		let l:str = l:str.getline(".")[col(".")-1+i]
	endfor
	return l:str
endfunction

この関数の引数には、取得したい文字数を指定します。

また、カーソルの前の文字列を取得する関数も作っておきます。

"カーソルの前の文字列を取得(引数は取得したい文字数)
function! GetPrevString(length) abort
	let l:str = ""
	for i in range(0, a:length-1)
		let l:str = getline(".")[col(".")-2-i].l:str
	endfor
	return l:str
endfunction

さきほどのものと同様に、引数には、取得したい文字数を指定します。

アルファベット、数字、全角文字かどうかを判定する関数

補完機能を作る上で、もうひとつとても重要なものがあります。
それは、その文字が、アルファベットなのか、数字なのか、全角文字なのか、といった判定がです。

そういった判定は、正規表現を使います。

"アルファベットかどうかを取得
function! IsAlphabet(char) abort
	let l:charIsAlphabet = (a:char =~ "\a")
	return (l:charIsAlphabet)
endfunction

"全角かどうかを取得
function! IsFullWidth(char) abort
	let l:charIsFullWidth = (a:char =~ "[^\x01-\x7E]")
	return (l:charIsFullWidth)
endfunction

"数字かどうかを取得
function! IsNum(char) abort
	let l:charIsNum = (a:char >= "0" && a:char <= "9")
	return (l:charIsNum)
endfunction

どの関数も、引数には判定したい文字を指定します。
また、数字かどうかの判定では、数字の「文字」の判定をしたかったので、正規表現は使いませんでした。

カーソルの左右に括弧があるかどうかを取得する関数

つづいて、カーソルの左右に括弧があるかどうかを判定できる関数を作っていきます。

"括弧の中にいるかどうかを取得
function IsInsideParentheses(prevChar,nextChar) abort
	let l:cursorIsInsideParentheses1 = (a:prevChar == "{" && a:nextChar == "}")
	let l:cursorIsInsideParentheses2 = (a:prevChar == "[" && a:nextChar == "]")
	let l:cursorIsInsideParentheses3 = (a:prevChar == "(" && a:nextChar == ")")
	return (l:cursorIsInsideParentheses1 || l:cursorIsInsideParentheses2 || l:cursorIsInsideParentheses3)
endfunction

引数にはカーソルの前と後の文字をひとつずつ指定します。

ここまでで、括弧やクォーテーションの補完に必要な機能を作ることができました。
次のページから、ここまでで作った関数を使って、実際に補完機能を作っていきます。

スポンサードリンク

関連コンテンツ

オススメ記事

office

WordやExcel、PowerPointなど、Officeを無料で使う方法

学校などで、WordやExcelを使って提出物を作らなければいけないことはありませんか? Microsoft Officeの購入を考えている方もいるかもしれません。しかし、今後使用するかどうかも分か

Excel

Excelの使い方。初心者でもすぐ分かる!基本を実践で完全解説

パソコンのソフトって無駄に高いですよね。。。 それなのに、学校の授業などで Microfost Office は必要となってきます。 しかし、そんなあなたに朗報です。 Office Online を

vim-airlineの使い方と設定方法。Vimのステータスバーを最強に!

なんてちっぽけで なんて意味のない なんて無力な@It_is_Rです。©️尾崎豊 Vimのステータスバーをかっこよくしたいと思い、vim-airlineを使ってみたのですが、日本語の情

.vimrc でVimの設定をしてみよう!

Vimでは、何も設定しない状態だと、真っ白な画面に黒字という、とてもシンプルな状態になります。 今回は、 .vimrc というファイルを編集(作成)して、 Vimの設定をする方法を紹介します。

Vimのウィンドウを分割して使う方法を分かりやすく紹介

今回も、Vimを学んでいきましょう。 Vimで複数のファイルを同時に編集したいとき、ウィンドウを分割すると便利です。そこで今回は、Vimの画面を分割して使う方法を紹介します。 今

【Vim使い方】初心者でもすぐに始められるVimの基本

前回に引き続き、Vimの使い方について解説していきたいと思います。 今回は、ファイルの作成方法、開き方、保存、そしてモードについてなど、実際にVimを使い始められるところまでしっかりと解説して

【Vim使い方】行番号を表示&非表示にする方法。

もしも魔法が使えたら猫になります。@It_is_Rです。 Vimの使い方、第7回目です。 今回はVimの画面に行番号を表示&非表示にする方法を紹介したいと思います。 前回の記事はこちらにな

Macに最新版のVimをインストールする方法

こんにちは。@It_is_Rです。 Vimは、プログラミングに使える、高機能なテキストエディタです。 使い方が普通のテキストエディタとは異なるので、最初はとっつきにくい所がありますが、慣

Vimを始めたら最初に覚えておきたいコマンド一覧

作業をしようと思ってから、実際にするまで3時間かかります。@It_is_Rです。 今回は、初心者卒業向けとして、Vimを使う上で最初に覚えておきたいコマンドをまとめました。 カー

Vimのコマンド一覧。これだけ覚えればかなり便利に!

Vimはたくさんのコマンドがあって、すべて覚えるのはとても大変です。そこで今回は、Vimでこれだけ覚えれば、かなり便利に使えるようになるコマンドを一覧にしました。 新規作成、保存、終了

コメントを残す(コメントは承認後に反映されます)

メールアドレスが公開されることはありません。