Home

vimでsnippetのインデント深くするときはハードタブじゃないとダメ

問題 vimのneosnippetを使っているときに,インデントが上手く動作しない場合があった. snippet initial options head #include <iostream> int main(int argc, char const* argv[]) { ${1} ${2} ${3} return 0; } のように書いて,snippetを起動させると以下のように, 一つ目のplaceholderより下のインデントでおかしくなる部分が出てしまう. 解決策 ググってみたところ,docsのここを見ろという内容のissue1を発見した. ...

Read more

`show $ head [1, 2]`は良くて`show . head [1, 2]`がエラーになる理由

Haskellでプログラミングの問題を解いていて,.だとエラーになるけど$に変えてみるとコンパイルが通る,という状況に何度か出くわした.理由を調査したのでメモする. 現象 > show . head [1, 2] <interactive>:15:1: error: • Non type-variable argument in the constraint: Num (a1 -> a) (Use FlexibleContexts to permit this) • When checking the inferred type it :: forall a a1. (Num (a1 -> a), Show...

Read more

.gitignoreに拡張子なしのファイルを登録する

この前gccでコンパイルした実行ファイルを無視するために,拡張子がないファイルだけをgitの管理対象から外したいと思ってやり方を調べたのでメモする. How do I add files without dots in them (all extension-less files) to the gitignore file? にあるStackoverflowの回答によると,以下のように.gitignoreなどのファイルに記述すれば (or 変数に値を入れれば) 実現できると書いてあった. * !*/ !*.* ただし,上の記述は先頭に加えないと動作しない (後勝ちなのでこのルールで前のルールが全て無効になってしまう). また,2行目は!/**/と書いてもOK. このルールは...

Read more

bashのforループのin句は省略できる

bashで配列内にある要素が存在しているか確認するための関数を書こうと思って,stackexchangeとかにあるかなと思って見てみたところ,見慣れないforの使い方があったのでメモする. containsElement () { local e match="$1" shift for e; do [[ "$e" == "$match" ]] && return 0; done return 1 } 上の関数の使い方は以下の通り. $ array=("something to search for" "a string" "test2000") $ containsElement "a string" "${array[@]}" $ echo ...

Read more

envコマンドについて

pythonスクリプトの1行目に#!/usr/bin/env pythonとかを書くが,envコマンドが何をやっているのかいまいちわかっていなかった.のでメモする. まず,envコマンドをそのまま実行すると,環境変数の一覧が見れる. $ env XDG_SESSION_ID=214 HOSTNAME=localhost.localdomain SELINUX_ROLE_REQUESTED= TERM=xterm ...(中略)... OLDPWD=/home また,envの後に引数としてコマンドを指定すると,${PATH}を頭から順に見ていき,指定したコマンドを実行したところでそいつを実行する.(ようだ) そのため,#!/usr/bin/env pythonが頭に書いてあるスク...

Read more

ポインタのキャストがわかりにくい

この前,callback関数についてちょっと調べようと思ってWikipediaのページのコードを見ていたが,ポインタ変数への代入部分でハマったのでメモする. コールバックの例のコード (C言語): #include <stdio.h> /* Library code */ int traverseWith(int array[], size_t length, int (*callback)(int index, int item, void *param), void *param) { int exitCode = 0; for (int i = 0; i < length;...

Read more

execコマンドについて

stackoverflowとかで時々,exec 3>&1という記述を見かける.何してる? man bashのexecの項 exec [-cl] [-a name] [command [arguments]] If command is specified, it replaces the shell. No new process is created. The arguments become the arguments to command. If the -l option is supplied, the shell place...

Read more

shell commandの連続リダイレクト

$ echo foo 1>&2 1>file.txt と $ echo foo 1>file.txt 1>&2 は異なる結果になる. $ echo foo 1>&2 1>file.txt # 何も出力されない $ cat file.txt foo $ echo foo 1>file.txt 1>&2 foo $ cat file.txt # 何も出力されない これはなぜかというと,リダイレクトの解釈の順番は 左から右へ行われ, ファイルディスクリプタへのリダイレクトは現在のファイルディスクリプタの参照先へリダイレクトされる からである. echo foo 1>&...

Read more