msysgitのGit Bashでも使える便利な5つのBashの補完機能

以下を設定しておくと便利になるというもの。
Linux/Unixユーザーなら、すでに設定してるんだろうけど、
WindowsユーザーGit BashBashを使い始めた人はなかなか
こういうものがあるのかがわからないので、情報には辿りつけない気がする。

.inputrc

%userprofile%\.inputrc に以下を設定する。

    #Search forward through the history for the string of characters between the
    #start of the current line and the point.  This is a non-incremental search.
    ##[DownArrow key] or [Ctrl +n]
    "\e[B":history-search-forward
    "\C-n":history-search-forward

    #Search  backward  through  the history for the string of characters between
    #the start of the current line and the point.   This  is  a  non-incremental
    #search.
    ##[UpArrow key] or [Ctrl +p]
    "\e[A":history-search-backward
    "\C-p":history-search-backward

    #Perform history expansion on the current line and insert a space.  
    # !!,!:1,!:1,!-2:1
    $if Bash
      Space:magic-space
    $endif

    #ignore case
    set completion-ignore-case on

.bashrc

%userprofile%\.bashrc に以下を設定する

    #complete typo
    shopt -s cdspell


どんな機能の説明、設定、使い方を説明する。

履歴の後方検索

説明

↑キー、または、Ctlr + pで履歴から補完する。
補完の対象は、コマンド、コマンドオプション、コマンドパラメータなど

設定
    "\e[A":history-search-backward
    "\C-p":history-search-backward
使い方

行頭で補完キーを入力するコマンド履歴をたどることができる。

    $ git diff .inputrc
      ↓
    $ cd dotfiles
      ↓
    $ ls


コマンドの履歴だけはなく、コマンドオプション、コマンドパラメータだけをたどることもできる。


以下のようなという履歴があったとする。

    4897 git status
    4901 git add .gitconfig
    4901 git commit
    4902 git push orign master
    4903 git status
    4904 git log --oneline
    4905 git log --graph --date=short --pretty=format:'%Cgreen%h %cd %Cblue%cn %Creset%s'


git の後で、補完キーを入力する

    git [↓キー] 
    git [Ctlr + p]


以下のように、コマンドオプションを遡っているくことができる。

   $ git log --graph --date=short --pretty=format:'%Cgreen%h %cd %Cblue%cn %Creset%s'
     ↓
   $ git log --oneline
     ↓
   $ git status
     ↓
   $ git push orign master
     ↓
   $ git commit
     ↓
   $ git add .gitconfig
     ↓
   $ git status

履歴の前方検索

    "\e[B":history-search-forward
    "\C-n":history-search-forward

↓キー、または、Ctlr + nで履歴から補完する。
補完の対象は、コマンド、コマンドオプション、コマンドパラメータなど

履歴の後方検索の場合とは逆に、履歴を未来の方向にたどる



特殊変数をその場で展開する

説明

以下のような特殊変数をその場で展開する
!:1 直前に実行したコマンドの1つ目のパラメータ
!:2 直前に実行したコマンドの2つ目のパラメータ
!-2:1 2つ前に実行したコマンドの1つ目のパラメータ

設定
    $if Bash
      Space:magic-space
    $endif
使い方

以下のように実行したとする

    $ git log --graph --date=short --pretty=format:'%Cgreen%h %cd %Cblue%cn %Creset%s'
    $ clear


この時点で以下のように実行すると特殊変数が展開される

    $ git !-2:1-4[スペース]

スペースを入力くすると、以下のように補完される。

  $ git log --graph --date=short --pretty=format:'%Cgreen%h %cd %Cblue%cn %Creset%s'

!-2:1-4は、2つ前のコマンドの1-4つ目までのオプション
(いい例が思いつかなかった。)


大文字小文字の無視

説明

ディレクトリ補完をするときに、大文字小文字の区別をしない。
Windowsだと大文字小文字の区別はしないため、それに合わせる。

設定
    set completion-ignore-case on
使い方

設定前だと以下のように dから補完されるのは2つ

    orangeclover@JUZI ~
    $ cd d
    dotfiles/       dotfiles.local/

設定後だと、以下のように d から補完されるのは大文字からディレクトリも含めて6つ

    orangeclover@JUZI ~
    $ cd d
    Desktop/        Documents/      Downloads/      Dropbox/        dotfiles/       dotfiles.local/

タイポの補完

説明

一文字の間違いなら、それに近いものに補完してくれる

設定

%userprofile%\.bashrcに以下を設定する

  #complete typo
  shopt -s cdspell
使い方

dotfiles ディレクトリだが、dotfilseとタイポした

orangeclover@JUZI ~
$ cd dotfilse


最も近いdotfilesに補完してくれた。

  orangeclover@JUZI ~/dotfiles (dev)
  $ pwd
  /c/Users/orangeclover/dotfiles

環境

関連

WindowsでGit(MsysGit)環境で、秀丸エディタ、Winmergeを使う設定




ここ間違ってるよ
こうした方がよくないか?
などなど
方法は、コメント、トラックバックはてブTwitter @orange_clover宛 で、お願いします。

WindowsのGit(msysgit)環境で、秀丸エディタ、Winmergeを使う設定

普段、Windows環境で使っているエディタは秀丸で、差分ツールはWinmergeだ。
Windowsなら、よくある環境だろう。
エディタに秀丸、外部差分ツールと外部マージツールにWinmergeの設定をする。


Gitのdiff・mergeをgitconfigだけでWinMergeにする
このサイトを見る限り、Gitの外部差分ツールと外部マージツールの指定には、シェルスクリプトを指定する必要はないようだ。
このサイトを真似て、WinMergeの設定をしてみた。

設定

%userprofile%\.gitconfig に以下を設定

[core]
    editor = 'C:/Program Files (x86)/Hidemaru/Hidemaru.exe' //fu8

[merge]
    tool = WinMerge
[mergetool "WinMerge"]
    path = C:/Program Files/WinMerge/WinMergeU.exe
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" \"$MERGED\"
[diff]
    tool = WinMerge
    guitool = WinMerge
[difftool "WinMerge"]
    path = C:/Program Files/WinMerge/WinMergeU.exe
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -e -ub -dl \"Theirs Files\" -dr \"Mine  Files\" \"$REMOTE\" \"$LOCAL\"

参照先のサイトの設定のままだと、MergeToolが正しく動作しなかったので修正した。(上記の設定は修正してある。)
訂正
diff側に余計な \が混じってたので削除


動かなかった現象と修正内容。

MergeToolが動かない

現象

mergeはまだ試してないんだけど、インストーラが書いたやつだからたぶん動く

正しく動かんよ・・・


オプションの区切り文字の確認

diffとmergeでオプションの指定が異なる。 / なのか -なのか?
パラメータは、スラッシュ( / ) か、ダッシュ ( - ) 文字が 前に付加されます。パス名にはプリフィックス文字を付加しません。
→どちらでもいいようだ。

-mってなんだ?
  WinMerge[U] [/r] [/e] [/f filter] [/x] [/xq] [/s] [/ul] [/ur] [/um] [/u] [/wl] [/wr] [/wm] [/minimize] [/maximize] [/dl leftdesc] [/dr rightdesc] leftpath [middlepath] rightpath [/o outputpath]

→そんなオプションない

-rってなんだ?
  /r すべてのサブフォルダ内のすべてのファイルを比較します(再帰比較)。 
  ユニークフォルダ (片方のみ存在するフォルダ)は、分離された項目として
  比較結果内にリストされます。 サブフォルダまで含めるとかなり比較時間が
  増大してしまうことに注意してください。 このパラメータを指定しなかった場合、
  WinMergeは比較するフォルダ内のファイルとトップレベルのサブフォルダのみ
  リストします。 サブフォルダの中までは比較しません。

→期待してる動きと違う気がする

修正して試すその1

設定
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -dl \"local\" -dm \"base\" -dr \"remote\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
起動

マージ先(ローカルリポジトリ、もしくは、ブランチ)、分岐元、マージ元(リモートリポジトリ、もしくは、ブランチ)で
表示される。

  • Mergeツールが起動するとファイルが4つできる
$ ls -1
memo.txt
memo.txt.BACKUP.15692.txt
memo.txt.BASE.15692.txt
memo.txt.LOCAL.15692.txt
memo.txt.REMOTE.15692.txt
保存
  • memo.txt
1
2
<<<<<<< HEAD
さーん
4
5
ろーく
=======
Fizz
4
Buzz
6
>>>>>>> dev
7
8
きゅーう
10

マージした内容は、memo.txt.LOCAL.15692.txtに保存されて、memo.txtには反映されない。



修正して試す その2

設定
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" \"$MERGED\"
起動
$ git mergetool -t WinMerge
Merging:
memo.txt

Normal merge conflict for 'memo.txt':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (WinMerge):


サイドバイサイドに表示された。

保存
1
2
さーん
4
5
ろーく
7
8
きゅーう
10

memo.txtに直接反映される。
こっちの方がよさそうだ。

環境

関連

msysgitのGit Bashでも使える便利な5つのBashの補完機能


ここ間違ってるよ
こうした方がよくないか?
などなど
方法は、コメント、トラックバックはてブTwitter @orange_clover宛 で、お願いします。

オレンジバックに変えたるわ!

最近、自宅のノートPCも会社のPCもブルーバックによくなる。







あまりにも頻繁になるし、暑いので、ついカッとなって・・・


ご利用は計画的に。
1 回のクリック操作で色を変更できる "ブルー スクリーン"

キーボード、マウス共有ソフト「Mouse Without Borders」と「Synergy+」の比較

http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-73-metablogapi/4403.mousewithout_5F00_lg_5F00_thumb_5F00_68331A64.jpg
http://synergy-foss.org/img/splash.jpg

比較表

機能 Mouse Without Borders synergy+
LinuxMac対応 ×
Windows 7対応
UACの操作 ×
ファイルのコピー ○ ※1
フォルダのコピー × ○ ※1
Ctrl + Alt + Deleteのエミュレート ×
設定の簡単さ
設定のカスタマイズ
サーバ・クライアントの逆転 ×
スクリーンキャプチャ ×
安定性

※1 パッチを適用したら。



LinuxMac対応

Mouse Without BordersはMicrosoft製なので、Windowsのみ。
LinuxMacと共存するなら、その時点でMouse Without Bordersの選択肢はない。

Windows 7対応

Mouse Without Bordersは全く問題なくできる。
Synergy+ は、 Windows 7からWindows XPへのクリップボードやファイルのコピーができない。

UACの操作

Mouse Without Bordersは全く問題なくできる。
Synergy+は以下の設定をしても、ユーザアカウント制御の画面の操作はできない
Windows 7の管理者権限で起動してるアプリケーションをsynergyで操作する方法

ファイルのコピー

Mouse Without Bordersはデフォルトでドラッグ & ドロップでマシン間でのファイルコピーができる。
しかし、「MouseWithoutBorders\コピーしたファイル」と1つ余計なフォルダが作成されるのが、鬱陶しい。
Synergy+は、以下のパッチを適用すればファイルコピーもできる。
synergy plusでファイルをコピーする
ただし、ドラッグ & ドロップではなく、コピーは、右クリックからコピーか 「Ctrl + C」で、貼り付けも
「右クリックから貼り付けか 「Ctrl +V」でしかできない。
また、Windows 7からWindows XPへのコピーはできなかった。

フォルダのコピー

Mouse Without Bordersはフォルダを丸ごとコピーすることはできない。
Synergy+は、ファイルのコピーのパッチを適用すれば、ファイルでも、フォルダ丸ごとでもコピーできる

Ctrl + Alt + Deleteのエミュレート

Mouse Without Bordersだとこれができない
Synergy+は「Ctrl + Alt + Pause」でエミュレートができる。

設定の簡単さ

Mouse Without Bordersの方が簡単。
Mouse Without Borders


Synergy+


と思ったけど、自分のがSynergy+が1.3系で古かった。
1.4系なら以下のように、GUIで設定できる。
http://www.dusanvuckovic.com/wp-content/uploads/2011/03/2.png

設定のカスタマイズ

Mouse Without Bordersは、設定を簡単にしてる分、カスタマイズできる項目も少ない。
Synergy+は、右側のマシンの右端からは、左側のマシンに移動しないなどという設定ができる。
ショートカットキーで、カーソルを左右のマシンへ行ったり来たりできる。
左右だけじゃなくて、上下という選択肢もある。
スクリーンセーバーの同期もできる。
Synergy+の方が細かい設定をカスタマイズすることができる。

サーバ・クライアントの逆転

Mouse Without Bordersは、どちらかのマシンからでも、キーボード、マウスを操作することができる。
Synergy+は、サーバ側からしか操作できない。

スクリーンショット

Mouse Without Bordersは、Send Screen Capture from>を選択し、マシン名を選択すると、
別マシンのスクリーンキャプチャを撮ることができる。
Synergy+は、できない。

安定性

Mouse Without Bordersは、特に問題ない。
Synergy+は、ロックかけた後やスクリーンセーバーからの復帰後に、サーバ側の入力が
おかしくなることがある。DやSなど特定のキーが、Ctrl、Altを押してないのに、
ショートカットキー状態になって、アプリが起動してしまう。




結論

僕は結局、OSの条件によって、使うソフトを使い分けている。

Windows 7がある場合は、Mouse Without Bordersを使っている。
Windows 7がない場合 または、Linuxがある場合は、Synergy+を使っている。


ダウンロード先

Microsoft download from The Garage: Mouse without Borders
synergy+











東プレ
参考価格 : ¥ 19,740
価格: ¥ 15,267
価格は記載時点のものです。購入前にAmazonでご確認ください。





マイクロソフト
参考価格 : ¥ 6,930
価格: ¥ 4,688
価格は記載時点のものです。購入前にAmazonでご確認ください。




マイクロソフト
参考価格 : ¥ 7,980
価格: ¥ 5,651
価格は記載時点のものです。購入前にAmazonでご確認ください。

『指令:windows上でnulという名前のファイルまたはフォルダを作ってください。』→できたよ


conってなに?のconと同様にnulも予約デバイスなのでWindowsでは、ファイルも、フォルダを作成することできない。
Windows XPだとリネーム前の名前に戻させれるし、
Windows 7だと「指定されたデバイス名は無効です。」のエラーになる。
ファイルで適当な拡張子をつけても作れない。
フォルダで「nul 」のようにスペースをつけても作れない。

通常はね。



画像の加工は一切してません。


ふふふ。
ある裏技を使うと、できるんだよね。



続きは「自分で試してください。」






































(。_+)☆\バキ(-.-メ)
嘘です。
続けます。


作り方

1) テキストファイルをエディタでUnicodeで開く
2) nulと入力
3) その後に以下の見えない文字を入力

- U+200B ( ZERO WIDTH SPACE )
- U+200C ( ZERO WIDTH NON-JOINER )
- U+200D ( ZERO WIDTH JOINER )
- U+FEFF ( ZERO WIDTH NO-BREAK SPACE )
- U+202A ( LEFT-TO-RIGHT EMBEDDING )

参考:HACK #7 同じ名前のファイルを作りたい

入力はIMEパッドから、選択する

4) 3)の文字をコピー
5) フォルダの作成でフォルダ名にペースト


はい、できあがり。


後ろに見えない文字があるだけどね。
「nul 」のスペースだと作れないけど、このUnicode文字では作れてしまう。




続き
『指令:windows上でnulという名前のファイルまたはフォルダを作ってください。』→できたよ→もっと簡単にできるとツッコミ

【お題】環境変数からファイル名や拡張子を自由に取り出す方法


バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法

ふか 2011/02/02 13:21
これって引数ではない普通の環境変数ではできませんか?

お題もらいました。
バッチファイル、コマンドプロンプト環境変数を展開したいとな。




「%~修飾子引数」だから、素直にやろうとすると、ドライブ文字だけに展開するならこうだよな。

c:\>echo %~dWINDIR%
%~dWINDIR%

c:\>echo %~d%WINDIR%
%~dC:\WINDOWS

両方だめだ。




あれこれ順番を入れ替えてみる

c:\>echo %WINDIR~d%
%WINDIR~d%


c:\>echo %WINDIR%~d
C:\WINDOWS~d


c:\>echo %WINDIR%%~d
C:\WINDOWS%~d

全部ダメ


set /?に載ってる置換で試す

c:\>echo %WINDIR:~d%
%WINDIR:~d%


c:\>echo %WINDIR:~d%WINDIR%%
%WINDIR:~dC:\WINDOWS%


c:\>echo %WINDIR:~d%%
%WINDIR:~d%%

ダメやね。




( ̄~ ̄;) ウーン
for文を使ったこの方法しか思いつかんな。

c:\>for /F %i IN  ('echo %WINDIR%') DO echo %~di

c:\>echo C:
C:

これなら、環境変数を引数にして渡したほうが楽かな。


スマートな方法をご存じの方教えてください。


バッチを吐き出すなんて方法もありか。

@set temp_cmd=%~dp0temp.cmd
@echo @set result=%%~d1 >"%temp_cmd%"
@call "%temp_cmd%" %WINDIR%
@del "%temp_cmd%"
@echo %result%

気になるモノ




ドナルド・A. ノーマン、野島 久雄、D.A. ノーマン

価格: ¥ 3,465
価格は記載時点のものです。購入前にAmazonでご確認ください。



シェルを指定できるタブ型コマンドプロンプトConsole + nyacusを試してみた


今、ckw + nyaousを使っている、5つぐらいckwを立ち上げるときもある。
そのときは、ckwもタブ型だったらなと思うことがある。
FirefoxThunderbird秀丸など、だいぶ前からタブ型が主流で、それに慣れてしまったせいだろう。


Google RSSリーダーでよさそうなソフトが目に止まった。
ckw + nyaosからConsole2 + nyaosに乗り換え

http://sourceforge.net/projects/console/

タブ型コンソール。シェルは最近お気に入りのnayosを設定。

console.exeを起動して、Edit->SettingsでShellにnyaosのexeを指定する。

Cygwinはあんまり入れようと思わない。

シェルを指定できるタブ型コマンドプロンプト console。これは知らなかった。
Cygwinを入れないのは僕も同じ。
僕は、ckw + nyacusを使ってる。(nyacusではなくて、nyaousというのもあるのだろうか?)


追記
nyaousじゃなくて、NYAOSかな?
NYAOS.ORG
以下のように名前が統一されたようだ。

   2.x                                     3.x
NYADOS - DOS,Windows9x用       ----+
PNG NYACUS - Windows2000,XP用  ----+-----  NYAOS
NYAOS/2 - OS/2用               ----+


consoleを試してみる。
海外のソフトウェアだと日本語の表示、入力が気になるところ。



ダウンロード

http://sourceforge.net/projects/console/
Console-2.00b147-Beta_32bit.zip


まだ、ベータなのか。

インストール

Console-2.00b147-Beta_32bit.zipを解凍

  • cosole2\
    • Console.exe
    • ConsoleHook.dll
    • FreeImage.dll
    • FreeImagePlus.dll
    • console.chm
    • console.xml


インストーラはないのでく、そのままコピーすればよさそうだ。

起動

console.exeをダブルクリック

タブ作成

メニューから作成

ボタンから作成

右クリックから作成

タブが作成される

どの手段でも同じようにタブが作成される。



日本語を試す

細かい設定の前に、一番気になる日本語周りを試す

日本語ディレクト

日本語ディレクトリに移動、表示


cdで移動して、Enterを連続実行
文字化けはしないが、プロンプトの表示がおかしくなる。


日本語ファイル

日本語ファイルの表示


同じく文字化けはしないが、表示される位置がおかしい。



シェルの変更

nyacusに期待して、設定変更

1)Edit>settingsからConsole Settingsを開く


2)nyacus.exeをシェルに設定する
  Console 
     Shell:C:\usr\bin\nyacus.exe

日本語を試す

改めて、日本語ディレクトリ、日本語ファイルを試す。

日本語ディレクト

日本語ファイル




ダメだ。
文字化けするわけではないので、全く使い物にならないわけではない。
かつclsで一旦クリアーすれば直る
だが、それを毎回するのは面倒だ。




残念ながら今回の採用については、見送らせて頂きたいと存じます。




やはり ckw + nyaousだな。

あと、GNU utilities for Win32もあれば、いいだろう。

気になるモノ




杉山 貴章、木本 裕紀

価格: ¥ 2,919
価格は記載時点のものです。購入前にAmazonでご確認ください。