Home

Macのghci上でCtrl+yを入力するとsuspendされる

MacのアプリケーションではCtrl-Yはヤンクに割り当てられていることが多いが,Haskellの対話環境であるghciを使っているときに,Ctrl-Yがおかしな動作をすることに気づいた. $ ghci Configuring GHCi with the following packages: GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help Loaded GHCi configuration from /private/var/folders/5q/q2ghsy6s29z88zqbtthn1x5w0000gn/T/ghci57891/ghci-script Prelude> -- ここでCtrl-Yを押...

Read more

vim-surroundで文字列を括弧で囲むときに空白をつけない方法

普段vim-surroundを使っているが,括弧をつけるときに選択した文字列の間にスペースが入ってしまうのを解決する方法があったのでメモする. 先に結論 vim-surroundをインストールした環境では,選択モードに入ってSを押した後, bで( Bで{ rで[ aで< をスペースなしで選択部分を囲むことができる. 他にも, tで任意のタグ (<でもOK) sでスペース (スペースでもOK) pで空行 lでLatexのEnvironments (\begin{foo} ~ \end{foo}のやつ) で囲むことができる. 括弧を削除するときは,対応する括弧の中に入って ds( (括弧の種類は消したいものに対応) と打てばよ...

Read more

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