curluneの日記

日々試行錯誤。雑多に、気ままに、てきとーに。HoloLens/Oculus Rift,Touchと戯れる日々。

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-8utf8でも大丈夫です。

: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

xxdvimに付属しているテキスト/バイナリ相互変換をしてくれるコマンドです。githubからvimコードを取ってきてビルドすると、一緒に出来上がっています。

1文字だけ確認したい場合

単に1文字のバイナリ表現を確認したい場合は、内蔵機能で確認する事ができます。 確認したい文字にカーソルを合わせてg8を入力するとバイナリ表現が確認できます。

終わりに

よくわからないファイルのバイナリがお手軽に確認できてたまーに便利です。 増減無しの書き換えのみの場合は-rのバイナリ化は分かりやすくてよいですね。

vimの'backspace'は全部入れておこうというお話 ひとりぷちアドベントカレンダー2017 15日目

vimset backspaceは全項目入れておかないと混乱しやすいよ、というお話です。

変な値になっていると編集動作がだいぶ独特になるのです。

これを設定しておけばオーケー

:set backspace=indent,eol,start
" あるいは こっち(同じ意味)
:set backspace=2

backspaceで変わる事

値が足りないと、消せない物が増えます。 特にstartが入っていない(2以外)時の動作は、独特だなあと思っています。

ざっくりというと入力の開始が、IMEで日本語入力中の未確定の状態、の英語版?物になるのです。

f:id:curlune:20171215235702p:plain

未確定の範囲しか消せず、区切りが表示されないので分かりにくいです。さらにカーソルを移動すると確定され、削除範囲が無くなる、的な動作です。

という訳で全部入れておきましょう。

終わりに

むかーし混乱しました。

今日の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')})()

終わりに

いろいろと準備が間に合わない...

findとgrepでファイル検索 ひとりぷちアドベントカレンダー2017 13日目

いつも何気なく使っているコマンドも、たまにはメモしておこうかなと。ということで検索コマンドです。

いつもの検索

だいたいこれを使っています。細かいオプションあんまり覚えていないだけともいう。

find "開始ディレクトリ" -type f -name "*.拡張子" -exec grep --color -n "検索文字" {} +

-exec

findにかかった物に対してコマンドを実行する仕組みです。

引数-execから、引数+までの間に書いた物をコマンドとして実行してくれます。 このなかの{}という文字列はfindでかかったファイル名に置換えてくれます。

先ほどのコマンドの場合は、次のようになります。

grep --color -n "検索文字" "ファイル名"

初めて見た時はどんな暗号なのかと思いましたが、分かってみると案外シンプルです。

引数の分割等細かい部分は面倒を見てくれるのでありがたいコマンドです。

grepの代わりにchmodに使う事で、ファイルだけ変更もできます。

終わりに

ねたがない。

bashのEscはショートカットが割当られているから連打でキャンセルにならないというお話 ひとりぷちアドベントカレンダー2017 12日目

bashEscはキャンセルとはかぎらないよ、というお話です。

危ない事は無いと思うけれど、Esc癖のある方は気をつけましょう。

Escはメタキーの代わり

bashでは、Esc次の入力をメタキーと押した事にする、というものになっています。

Escを押してから>を押すと、メタキーを押しながら>押した場合と同じ扱いです。 そのため、適当にEscを押してからキーを入力すると何らかのショートカットが発動する場合があるのです。

Readline の記法

このセクションでは、emacs 形式の記法を使ってキーストロークを表します。 コントロールキーは C-key で表します (例: C-n は Control-N の意味です)。同様に メタ キーは M-key で表すので、M-x は Meta-X を表すことになります。 (メタ キーがないキーボードでは、M-x は ESC x を表します。つまり、 エスケープキーを押した後に x キーを押します。これは ESC を メタプレフィックス (meta prefix) にする操作です。 M-C-x の組み合わせは、ESC-Control-x つまり、エスケープキーを押した後に、コントロールキーを押したまま x を押すことを意味します。)

Man page of BASH

メタキー周りのショートカット

手元で次のようなショートカットが割当られていました。\eEscです。

bind -p | grep '\\e'
"\e\C-g": abort
"\eOD": backward-char
"\e[D": backward-char
"\e\C-h": backward-kill-word
"\e\C-?": backward-kill-word
"\eb": backward-word
"\e<": beginning-of-history
"\eOH": beginning-of-line
"\e[H": beginning-of-line
"\ec": capitalize-word
"\e\C-]": character-search-backward
"\e\e": complete
"\e!": complete-command
"\e/": complete-filename
"\e@": complete-hostname
"\e{": complete-into-braces
"\e~": complete-username
"\e$": complete-variable
"\e[3~": delete-char
"\e\\": delete-horizontal-space
"\e-": digit-argument
"\e0": digit-argument
"\e1": digit-argument
"\e2": digit-argument
"\e3": digit-argument
"\e4": digit-argument
"\e5": digit-argument
"\e6": digit-argument
"\e7": digit-argument
"\e8": digit-argument
"\e9": digit-argument
"\eA": do-lowercase-version
"\eB": do-lowercase-version
"\eC": do-lowercase-version
"\eD": do-lowercase-version
"\eE": do-lowercase-version
"\eF": do-lowercase-version
"\eG": do-lowercase-version
"\eH": do-lowercase-version
"\eI": do-lowercase-version
"\eJ": do-lowercase-version
"\eK": do-lowercase-version
"\eL": do-lowercase-version
"\eM": do-lowercase-version
"\eN": do-lowercase-version
"\eP": do-lowercase-version
"\eQ": do-lowercase-version
"\eR": do-lowercase-version
"\eS": do-lowercase-version
"\eT": do-lowercase-version
"\eU": do-lowercase-version
"\eV": do-lowercase-version
"\eW": do-lowercase-version
"\eX": do-lowercase-version
"\eY": do-lowercase-version
"\eZ": do-lowercase-version
"\el": downcase-word
"\e\C-i": dynamic-complete-history
"\e>": end-of-history
"\eOF": end-of-line
"\e[F": end-of-line
"\eOC": forward-char
"\e[C": forward-char
"\ef": forward-word
"\eg": glob-complete-word
"\e^": history-expand-line
"\e#": insert-comment
"\e*": insert-completions
"\e.": insert-last-argument
"\e_": insert-last-argument
"\ed": kill-word
"\eOB": next-history
"\e[B": next-history
"\en": non-incremental-forward-search-history
"\ep": non-incremental-reverse-search-history
"\e=": possible-completions
"\e?": possible-completions
"\eOA": previous-history
"\e[A": previous-history
"\e\C-r": revert-line
"\er": revert-line
"\e ": set-mark
"\e\C-e": shell-expand-line
"\e&": tilde-expand
"\et": transpose-words
"\eu": upcase-word
"\e.": yank-last-arg
"\e_": yank-last-arg
"\e\C-y": yank-nth-arg
"\ey": yank-pop

終わりに

Escがキャンセル系でない、というのは若干なれない感じはあります。

けれどもコマンドラインのような、ほとんどのキーが入力用に使われる場面では、同時押し以外でショートカットが割り当てられる、というのは案外便利な物です。