Skip to content

hayaishi/surround-string

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 

Repository files navigation

surround.vim に似た動作をEmacs上で実現するためのelispコード。
利用するには surround-string.el をパスの通ったディレクトリに格納して、

 (require 'surround-string)

としてください。
surround-string.el は以下のような動作をします。

1. あらかじめ指定した文字列で選択した文字列を囲む。

;; 設定
(global-set-key "\C-q" (surround-string "'|'")) ;; 文字列を ' で囲む。

;; 以下のクオートされていない文字列を選択します。
this string is no quote.

;; [ から ] がリージョンの範囲だとみなしてください。
[this string is no quote.]

;; 上記の設定の通り ctrl-q を押します。
'this string is no quote.'

上記のように選択した文字列がクオートされます。
※ 一度クオートした文字列に対して再度クオートしようとすると、クオートが外れます。

'string' => string

2. 現在の point が属す文字の区切りをクオートする。

この機能は不完全です。改善する予定はありますが文字列の区切りが思うものと違う場合は
利用することを避けた方が無難です。
現在いる point からは以下のような方法で文字列を特定しています。

this string is no quote. ;; quote の o と t の間にカーソルを持ってくる。

is no quo|te. ... =>  is no 'quote.'... ;; quote. のみクオートされる。

ご理解いただけたでしょうか。この機能は現在文字の区切りとして空白または改行を利用しており
faceなどでの判断はしていません。よって実際に使う場合は以下のように困ることがあります。

;; quote したい perl のコード
$hash->{key} ;; key の部分が裸の文字列のためクオートしたい。

;; e と y の間にカーソルを持ってくる。
->{ke|y} => '$hash->{key}'

key のみクオートして欲しいと思った方は、意図したものと違うはずです。
surround-string.el を使う場合、こういうケースについては key を選択して
クオートするのが無難です。

3. 設定について。

上記の項目でも紹介しましたが、この文字列を囲うための elisp コードは
キーバインドに割り当てて使うのが一般的かと思います。
設定の方法は以下のようにおこなってください。

;; ctrl-q に設定
(global-set-key "\C-q" (surround-string "'|'")) ;; 文字列を ' で囲む。

(surround-string "'|'") は文字列を ' で囲うための lambda 関数を返します。
選択したい範囲を囲う文字列は区切り文字として | を含み前後に分けてください。

Releases

No releases published

Packages

No packages published