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')})()
終わりに
いろいろと準備が間に合わない...
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日目
bash
のEsc
はキャンセルとはかぎらないよ、というお話です。
危ない事は無いと思うけれど、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 を押すことを意味します。)
メタキー周りのショートカット
手元で次のようなショートカットが割当られていました。\e
はEsc
です。
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
がキャンセル系でない、というのは若干なれない感じはあります。
けれどもコマンドラインのような、ほとんどのキーが入力用に使われる場面では、同時押し以外でショートカットが割り当てられる、というのは案外便利な物です。