vimでテキストをソートする ひとりぷちアドベントカレンダー2017 20日目
vim
内蔵のソートコマンド:sort
についてのお話です。
ソート対象
次のテキストをいろいろ並び替えてみます。
bb,100 ccc,03 a,2 ccc,03
ふつうに
しんぷる。
:sort
a,2 bb,100 ccc,03 ccc,03
逆順
!
を付けると逆順になります。
:sort!
ccc,03 ccc,03 bb,100 a,2
カンマの後項目で
ソートする際に無視する文字を正規表現で指定できます。
最初の,
までを無視する場合はこちら。
:sort /[^,]*,/
ccc,03 ccc,03 bb,100 a,2
文字列としてソートされるのでちょっと残念な結果に...。
数字として見る
先ほどのものにn
を追加すると、数字として見て並び替えてくれます。
:sort n /[^,]*,/
a,2 ccc,03 ccc,03 bb,100
そのほか、16進数や、少数を指定する方法もあります。
カンマの後の項目でその2
正規表現の利用としては、無視する、ではなく、該当部分でソート、もできます。r
をつけるだけです。
:sort n r /\d\+/
a,2 ccc,03 ccc,03 bb,100
終わりに
内蔵なのでいつでも使えるのがよいですね。 正規表現を頑張るといろいろできます。
vimのdigraphsで遊ぶ ひとりぷちアドベントカレンダー2017 19日目
簡易なIME的機能、digraphs
で遊んでみようというお話です。
入力と出力結果の関係性が面白いです。
digraphs
digraphs
(ダイグラフ)は、キーボードに無い文字を入力する仕組みのひとつです。
簡易なIME的なものです。
2つのキー入力で、ひとつの文字を入力します。
日本の環境では立派なIMEが常備されているので、お目にかかる事はあまり無いかもしれません。
詳細が知りたい時はこちらをどうぞ。
:help digraph
使い方
入力状態のとき、Ctrl+k
を押すと受付状態になり、?
が表示されます。
その後に入力した2つキーから1つの文字を入力する事ができます。
一例
入力と出力結果の関係性は様々です。 多くは外見から来るもの、名称由来なものですが、謎な物も多いです。
一覧は:digraphs
で確認できます。
外見
a
と:
でä
-
と:
で÷
o
と/
でø
名称
C
とo
で©
Y
とe
で¥
O
とK
で✓
日本語
t
とu
でつ
T
とu
でツ
t
とU
でっ
終わりに
一覧を見るとなんだかワクワクしますね。
日本語50音そろっているので、頑張ると日本語フォントやIMEが無い環境でも日本語文章をつくれます!直接確認できないのでつらいけれども。
コード登録で少し面倒ですが、自分でオリジナルの組み合わせも利用できます。気になったらぜひヘルプ:help digraph
を眺めてみてください。
vimのバックアップやスワップの保存場所を変更する ひとりぷちアドベントカレンダー2017 18日目
vim
が自動生成するバックアップやスワップファイルの保存場所の変更方法についてのお話です。
最近は.gitignore
等で無視してしまうので気にならない事が多いですが、稀に邪魔になるので別の場所に移してみます。
保存場所の変更
それぞれ次のような設定で保存場所を変更できます。 候補の先頭として任意の場所を指定しています。
" swap set directory^=/path/to/swap " backup set backupdir^=/path/to/backup
ディレクトリは予め用意しておく必要があります。作り忘れると別の候補が利用されます。
単にファイルと同じ場所に作られる事を避けたい場合は次の設定でも大丈夫です。
候補の先頭になっている.
(同じ場所)を取り除く事で、$TMP
等の他の候補が使われます。
set directory-=. set backupdir-=.
終わりに
ローカルではこれらのファイルにお世話になる事はあまり無いかもしれません。
リモートでは、通信切れてしまった場合など、たまーに活躍してくれます。
vimのエンコーディングいろいろ ひとりぷちアドベントカレンダー2017 17日目
vim
のエンコーディング周りのメモです。
エンコーディングを指定して開き直す
化けてしまって別の設定で開き直したい時に使います。
大体はこのあたりのどれかでok。utf-8
はutf8
でも大丈夫です。
:e ++enc=shift_jis :e ++enc=cp932 :e ++enc=utf-8
場合によっては先に内部エンコーディングを変えておいた方が良いかもしれません。
set encoding=utf-8
エンコーディングを指定して保存する
開くのではなく、今のファイルを別の設定で保存したい時に使います。
:set fileencoding=utf-8
文字化けしにくいようにする
文字エンコーディングの候補を設定すると文字化け確率を減らせます。もちろん、候補に無い物は化けます...。
:set fileencodings=ucs-bom,utf-8,cp932
最初のucs-bom
は少し特殊な物で、バイトオーダーマーク(BOM)関係です。最初に入れておくと良いと思います。
候補の指定にはfileencodings
で、最後にs
が必要です。fileencoding
とは別のものです。
エンコードの判定
そもそもテキストファイルというものは、文字エンコードについての情報を持っていません。
そのため、各種エディタはいろいろ試して(あるいは固定)でエンコードを推測してくれています。
vim
の場合は、候補リストのfileencodings
と内部エンコーディングのencoding
を使って推測してくれます。
fileencodings
の先頭の設定で開いてみる。- 成功した場合は確定!
- 失敗した場合は、次の設定で繰り返す。
成功/失敗は、不正なバイト列があるかどうかで決まります。 なので、中身が空の場合や文字が少なく偶然成功した場合は、先頭の方の候補として誤認識される場合もあります。
ゴミが入っている場合も失敗します。utf8
なファイルだけど、壊れたバイトが含まれてしまっているという場合は失敗にしてしまいます。
以前にディスクがあふれて途中まで書きこまれ、壊れたバイトを含むため正しく開けない、なんてことがありました。
終わりに
テキストファイルさん、エンコード情報何処かに持っていてほしかったなあ。
vimとxxdでバイナリ情報をみる ひとりぷちアドベントカレンダー2017 16日目
バイナリをちょこっと見るだけならvimでもできるよというお話です。
バイナリ相互変換
次のコマンドで編集中のファイルのバイナリ表現を表示できます。-g1
はグループ化単位の数です。なぜか初期値は2ですが、1のほうが使い勝手が良いと思います。
:%!xxd -g1
また、次のコマンドでバイナリ表現の通りのファイルを変換できます。
:%!xxd -r
xxd
xxd
はvim
に付属しているテキスト/バイナリ相互変換をしてくれるコマンドです。github
からvim
コードを取ってきてビルドすると、一緒に出来上がっています。
1文字だけ確認したい場合
単に1文字のバイナリ表現を確認したい場合は、内蔵機能で確認する事ができます。
確認したい文字にカーソルを合わせてg8
を入力するとバイナリ表現が確認できます。
終わりに
よくわからないファイルのバイナリがお手軽に確認できてたまーに便利です。
増減無しの書き換えのみの場合は-r
のバイナリ化は分かりやすくてよいですね。
vimの'backspace'は全部入れておこうというお話 ひとりぷちアドベントカレンダー2017 15日目
vimでset backspace
は全項目入れておかないと混乱しやすいよ、というお話です。
変な値になっていると編集動作がだいぶ独特になるのです。
これを設定しておけばオーケー
:set backspace=indent,eol,start " あるいは こっち(同じ意味) :set backspace=2
backspaceで変わる事
値が足りないと、消せない物が増えます。
特にstart
が入っていない(2
以外)時の動作は、独特だなあと思っています。
ざっくりというと入力の開始が、IMEで日本語入力中の未確定の状態、の英語版?物になるのです。
未確定の範囲しか消せず、区切りが表示されないので分かりにくいです。さらにカーソルを移動すると確定され、削除範囲が無くなる、的な動作です。
という訳で全部入れておきましょう。
終わりに
むかーし混乱しました。
今日のvisaレートを確認する ひとりぷちアドベントカレンダー2017 14日目
なんだかんだで海外でのお買い物が増えてきたので、サクッとvisaレートを確認するスクリプトをつくってみました。
今日のvisaレート確認ページを開く
最初のf
に為替の手数料(%)を入れます。
javascript:(function(){f=2;d=new Date();window.open('https://usa.visa.com/support/consumer/travel-support/exchange-rate-calculator.html/?fromCurr=JPY&toCurr=USD&fee='+f+'&exchangedate='+[d.getMonth(),d.getDate(),d.getYear()].join('%2F')+'&submitButton=Calculate+Exchange+Rates')})()
終わりに
いろいろと準備が間に合わない...