November 10, 2019, 3:49 am
注意
ArchLinuxとDebian(pacmanとapt)しか書いていません。(筆者がこれしかわからない)
pacman -Qの部分を変更すればyumなどでも使用できると思います。
ディストリビューションに関係なくbashです。
今回はnanoがインストールされているか調べることにします。
(変数pkgの値を変更すれば他のパッケージも調べられるようにしてあります。)
ArchLinux
pkg=nano
if[[-z$(pacman -Q | awk'{print $1}' | grep-x$pkg)]];then
echo"$pkg is installed."else
echo"$pkg is not installed."fi
Ubuntu
pkg=nano
if[[-z$(dpkg --get-selections | awk'{print $1}' | grep-x$pkg)]];then
echo"$pkg is installed."else
echo"$pkg is not installed."fi
↧
November 10, 2019, 7:45 pm
こちらで開発した eopen-ecdの新機能の紹介です。どんな機能かは以下のデモ動画で
![demo.gif]()
ecd
は前バージョンではエクスプローラーのディレクトリにターミナルのディレクトリを移動するコマンドだったのですが、考え方を変えて両方のディレクトリを同時に移動するコマンドに変更しました。:
で始まる特殊なパスを使うことで、前と同じようにエクスプローラーのディレクトリに移動することもできます。(Windows側のホームディレクトリを意味する ~~
で始まるパスも用意しています。)
ecd
コマンドは cd
コマンドの代わりとして使用することができます。ターミナルとは別ウインドウで現在のディレクトリ一覧をバックグラウンドで表示することができるので、cd
で移動した後 ls
でファイル一覧を確認する必要はなくなり、ターミナルとエクスプローラーの間でディレクトリをいちいちコピペやドラッグアンドドロップして移動する必要もなくなります。
あとタイトルはWSLとなっていますが(私がメインで使うのはWSLなので)、PowerShellとコマンドプロンプトにも対応しています。
↧
↧
November 11, 2019, 12:24 am
はじめに
Node.jsでyまたはnの応答に従い、バッチ処理を実行するJavaSciptのサンプルを作成しました。
この辺、Promiseとasync/awaitなどを利用して対話的に同期処理を実行すると分けがわからなくところです。
初学者向けと自らの備忘録で掲載します。
前提
バッチ処理リスト
[{"msg":"★ ★ リストを確認します。(ls) 実行 = y, 中止 = n ★ ★","con":"y","can":"n","cmd":"ls"},{"msg":"★ ★ パスを確認します。(pwd) 実行 = y, 中止 = n ★ ★","con":"y","can":"n","cmd":"pwd"}]
JSON項目説明
項目 | 説明 |
---|
msg | 応答文、実行と中止を定義 |
con | 実行(continu)の文字列を定義 |
can | 中止(cancel)の文字列を定義 |
cmd | 実行するコマンド(command)を定義 |
バッチ処理スクリプト
constexec=require('child_process').execFileSync;constfs=require('fs');constjson=JSON.parse(fs.readFileSync('./batchlist.json','utf8'));// コンソール標準入出力constrl=require("readline").createInterface(process.stdin,process.stdout);constgets=()=>newPromise(res=>rl.once("line",res));/**
* コマンドラッパー(同期処理)
* @param {String } cmd - コマンド
*/functionsh(cmd){try{console.log(exec(cmd,{shell:true}).toString());}catch(error){console.log(error.stderr.toString());}}// バッ処理実行(asyncfunction(){for(vari=0;json.length>i;i++){console.log(json[i].msg);str=awaitgets();if(str==json[i].con){console.log(json[i].cmd);sh(json[i].cmd);}elseif(str==json[i].can){process.exit();}else{console.log(str+"は入力不正です。")i--;}}process.exit();})();
説明
- コマンド実行はchild_processのexecFileSyncを利用して同期処理
- JSONの読み出しもfsのreadFileSyncを利用して同期処理
- 残るは、コンソールからの入出力応答をPromoiseとasync/awaitで同期処理
gets関数で定義
実行
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
PS C:\Users\~>bash --version ...①
GNU bash, version 4.4.12(2)-release(x86_64-pc-msys)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
PS C:\Users\~>bash ...②
USER MINGW64 ~/
$ node Dobatch.js ...③
★ ★ リストを確認します。(ls)実行 = y, 中止 = n ★ ★
y
ls
batchlist.json
Dobatch.js
★ ★ パスを確認します。(pwd)実行 = y, 中止 = n ★ ★
y
pwd
/c/Users/~/
USER MINGW64 ~/
$
説明
① bashのバージョン確認
② PowerShellからbashへ切替え
③ Dobatch.jsの実行
※ 実行で表示されるパスは出力を編集して表示しています。
まとめ
Node.jsのコンソールからの標準入力がめんどくさい、VBのMsgBox的なコーディングをしようとして悪戦苦闘した記憶がありました。ファイルの読み込みとコマンド実行を同期処理にすれば、以外と簡単にできると思います。たぶレスポンスはいまいちだと思います。
色々なシステム導入ツールがあると思いますが、JSONファイルのバッチ定義で簡易システム導入ツールとしてご利用してみてください。ただし、参考までに、例によって一切のご利用はあくまでも自己責任でお願いします。
↧
November 11, 2019, 4:25 am
とりいそぎコードのみ。
kaku2narou.sh
for textfile in$(grep-lE'《《[^》]+》》'*);do#該当記述を含むファイルを検出for hit in$(grep-Eo《《[^》]+》》 "${textfile}");do#ファイルごとに該当記述を検出phrase=$(echo-n"${hit}" | sed-e's/^《《//'-e's/》》$//')#傍点部付きの文字列を検出cn=$(echo-n"${phrase}" | wc-cm | grep-Eo'\d+')#文字列の文字数をカウントdots=$(printf'%*s'"$cn" | sed-e's/ /・/g')#中黒を並べる
gsed -i-e"s/${hit}/|${phrase}《${dots}》/""${textfile}"#置換するdone
done
上記のコードの場合、《《ぼうてんぶ》》
を|ぼうてんぶ《・・・・・》
のような形に変換する。
ただし、小説家になろうでは10文字を超える連続ルビが使用できない。
そこで、原稿のメンテナンス性を無視して、|ぼ《・》|う《・》|て《・》|ん《・》|ぶ《・》
のような形に変換するコードが以下。
kaku2narou.sh
for textfile in$(grep-lE'《《[^》]+》》'*);do
for hit in$(grep-Eo《《[^》]+》》 "${textfile}");do
phrase=$(echo-n"${hit}" | sed-e's/^《《//'-e's/》》$//')nphrase=$(echo-n"${phrase}" | gsed -E-e's/(.)/|\1《・》/g')
gsed -i-e"s/${hit}/${nphrase}/""${textfile}"done
done
変数がきちゃない。
あと変数名をちゃんと{}
でくくらないとバグってびびった。
↧
November 11, 2019, 4:43 am
やりたいこと
echoでsed "${line},10d" hoge.txt
と出力したい
問題点
# これだと""が思い通りに解釈されないecho"sed "${line},10d" hoge.txt"# これだと変数が展開されないecho'sed "${line},10d" hoge.txt'
対処方法
海外の記事にあったけどなんかしっくりこない。
誰かいい方法合ったら教えてください。
"
を変数に代入すればいいらしい。
dqt='"'echo"sed ${dqt}${line},10d${dqt} hoge.txt"
↧
↧
November 11, 2019, 5:28 am
この記事の目的
- ShellScriptの学習
- じゃんけんゲームのロジックのサンプルとして共有
- 他にいいロジックがあるか知りたい
- じゃんけんゲームを始めて作ったので振り返ってみる
やりたいこと
- じゃんけんゲームをShellScript(Bash)で実装
- 対話式でじゃんけんを行う
- コンピュータ側の手はランダムで決定
- 先取制にする(ex.3回戦だったら2勝でじゃんけん終了)
参考にさせていただいた問題
http://g-network.boo.jp/wiki/2018/02/post-909/
実行環境
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
ソース
#!/bin/bashreadonly GAME_TIMES=5 #何本勝負かreadonly FIRST_TO_GET_CNT=$((${GAME_TIMES}/2+1))#先取数#手の数字を名前に変換する
handcode_to_name (){case$1in
0)echo“グー” ;;
1)echo“チョキ” ;;
2)echo“パー” ;;esac}game_count=1 #現在何番戦かplayer_win_cnt=0 #プレイヤー勝利数cpu_win_cnt=0 #CPU勝利数aiko_flg=false#あいこかどうかのフラグ#処理開始echo"じゃんけんを開始します。${GAME_TIMES}本勝負、${FIRST_TO_GET_CNT}勝先取です。"sleep 2
#勝負本数まで かつ プレイヤー/CPUが勝数先取するまでループする。while[${game_count}-le${GAME_TIMES}-a\${player_win_cnt}-lt${FIRST_TO_GET_CNT}-a\${cpu_win_cnt}-lt${FIRST_TO_GET_CNT}];do
if!${aiko_flg};then
echo"${game_count}回戦目です"sleep 2
fi
echo"数字を選んでください。 0:グー 1:チョキ 2:パー"is_vaild_player_hand=false
loop_cnt=0
# プレイヤーの手を読み取るwhile[!$is_vaild_player_hand-o${loop_cnt}-eq 0 ];do
read input
if[[!${input}=~ ^[0-2]$ ]];then
echo"0 1 2のいずれかの数字を入力してください。"is_vaild_player_hand=false
continue
fi
is_vaild_player_hand=true
loop_cnt=$((${loop_cnt}+1))done
player_hand=${input}cpu_hand=$(($RANDOM%3))echo
sleep 2
# 勝敗判定if[${player_hand}-eq${cpu_hand}];then
echo"あなたの手は`handcode_to_name ${player_hand}`でした。"echo"コンピュータの手は`handcode_to_name ${cpu_hand}`でした。"echo"あいこなので再選択してください。"echo
aiko_flg=true
continue
elif[$(((${player_hand}-${cpu_hand}+3)%3))-eq 2 ];then
echo"あなたの手は`handcode_to_name ${player_hand}`でした。"echo"コンピュータの手は`handcode_to_name ${cpu_hand}`でした。"echo"あなたの勝ちです"player_win_cnt=$((${player_win_cnt}+1))game_count=$((${game_count}+1))aiko_flg=false
elif[$(((${player_hand}-${cpu_hand}+3)%3))-eq 1 ];then
echo"あなたの手は`handcode_to_name ${player_hand}`でした。"echo"コンピュータの手は`handcode_to_name ${cpu_hand}`でした。"echo"あなたの負けです"cpu_win_cnt=$((${cpu_win_cnt}+1))game_count=$((${game_count}+1))aiko_flg=false
fi
echo"現在${player_win_cnt}勝${cpu_win_cnt}敗"echo
sleep 2
done
echo"あなたは${GAME_TIMES}回中${player_win_cnt}勝ちました。"#${player_win_cnt} > ${cpu_win_cnt}if[${player_win_cnt}-gt${cpu_win_cnt}];then
echo"${player_win_cnt}勝${cpu_win_cnt}敗であなたの勝ちです!"elif[${player_win_cnt}-eq${cpu_win_cnt}];then
echo"${player_win_cnt}勝${cpu_win_cnt}敗で引き分けです"else
echo"${player_win_cnt}勝${cpu_win_cnt}敗であなたの負けです..."fi
苦労した点や感想など
- 勝敗判定は(自分の手 - 相手の手 + 3) % 3で実装した1
- まだ比較演算子の書き方が慣れない...
- bool値の比較方法と正規表現に苦戦
↧
November 11, 2019, 10:23 pm
Gsettingsを使ってデスクトップ壁紙を変更
何かのきっかけでスクリプトから壁紙を変更したくなることもあるかと。
背景色を黒く
gsettings set org.gnome.desktop.background primary-color 000000
背景ビットマップ指定パスをを消す(デフォルト背景に変わる)
gsettings set org.gnome.desktop.background picture-uri none
背景色表示に切り替える(上記の結果、「黒く」なる)
gsettings set org.gnome.desktop.background picture-options 'none'
背景ビットマップ指定パスを設定(まだ背景は表示されない)
gsettings set org.gnome.desktop.background picture-uri "file:///home/ubuntu/new_wall_paper.png"
背景ビットマップ表示モードを設定(ここで初めて背景が表示される)
gsettings set org.gnome.desktop.background picture-options 'scaled'
↧
November 12, 2019, 4:40 am
rsync
を使っているときに,大体どんなプロジェクトでも共通して無視したいファイルがあるのでそれを設定する.
自分はfishを使っているので設定に以下の alias
を追加する.ホームディレクトリに .rsyncignore
があればそれを読み込んでくれる.
if[-e ~/.rsyncignore ];then
alias rsync="rsync --exclude-from ~/.rsyncignore"fi
# rsync global excluding settingif test-f ~/.rsyncignore
alias rsync "rsync --exclude-from ~/.rsyncignore"
end
rsync
では --exclude-from
でファイルを渡すことで除外リストを設定できる.このとき,ファイルの記述形式は各行が--exlude
に渡されるものと思えば良い.(.gitignore
とかと同じように書けばだいたい大丈夫)
--exlude
と同様,--exclude-from
も複数指定できるので,ローカルの除外リストをさらに付け加えても支障はない.
rsync -auv--dry-run--exclude-from ./rsyncignore.local from/ to/
↧
November 12, 2019, 11:45 pm
パスワードを一括生成してコピペしたいことがあったのでメモ
サンプル
数字8桁で先頭が0でない文字列を10個生成
コマンド
$ cat /dev/urandom | tr -dc '0123456789' | fold -w 8 | grep -v '^0' | head -n 10
実行結果
74101604
15854326
24370649
78490829
36276057
70422352
94393920
82691490
34135561
48386263
数字/英小文字/英大文字/記号12桁で必ず記号を含む文字列を10個生成
コマンド
$ cat /dev/urandom | tr -dc '0123456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ,.+\-!' | fold -w 12 | grep -E '[,\.+\-\!]' | head -n 10
実行結果
zD,JXJdHQ,gC
15zwLb7HVh,W
3CG,64,,yQbR
XX7E.ejM9.R,
ebysijGSpfZ,
,XHtcyi4G.UN
Y38MX3c.bhnp
w4,dRUjrpby!
JJUrH3eW5H,r
.WWDp84.w5Ds
shellscript化
$ cat generate_password.sh
#!/bin/bash
# 引数チェック
if [ $# -ne 1 ]; then
echo "Usage:sh generate_password.sh password_num"
echo "Example:sh generate_password.sh 10"
exit 1
fi
# 生成したい数
generate_num=$1
# 数字8桁で先頭が0でない文字列を引数の数だけ生成
cat /dev/urandom | tr -dc '0123456789' | fold -w 8 | grep -v '^0' | head -n ${generate_num}
$ sh generate_password.sh 10
74948144
55446718
50202090
54395135
40939495
78852681
71060205
39155894
19875823
24833084
↧
↧
November 13, 2019, 4:34 am
毎度、巨大なCANのログファイルをエディタで開いて、正規表現でgrep検索して、特定フレームを抽出するのが面倒だったので、指定したフレームだけを引っこ抜くスクリプトを作った。(ログファイルの形式次第では変更が必要かもしれない。)
そのまま実行しても標準出力として出力されるだけなのでリダイレクトしてください。
まぁ、Qiita見てるような方は既に自己解決していると思いますがw
#!/bin/bash# CANLogファイルを指定FILE=# 抽出したいフレームを指定FRAMES=("""")cat$FILE | while read line;do
for frame in"${FRAMES[@]}";do
if[[$line=~ $frame]];then
echo$linefi
done
done
参考までに、CANログって大体こんな感じ。(適当にネットから拾ってきたものです。)
0.003586 1 F9 Rx d 8 00 DA 40 33 D0 63 FF 1C Length = 228000 BitCount = 118 ID = 249
0.003738 1 1CF Rx d 3 00 00 05 Length = 144000 BitCount = 76 ID = 463
0.003976 1 711 Rx d 8 00 23 00 7E FF EB FC 6F Length = 230000 BitCount = 119 ID = 1809
0.004148 1 1D0 Rx d 4 00 00 00 00 Length = 164000 BitCount = 86 ID = 464
0.004382 1 C1 Rx d 8 30 14 F6 08 32 B4 F7 70 Length = 226000 BitCount = 117 ID = 193
0.004615 1 C5 Rx d 8 31 27 F8 44 32 B0 F8 5C Length = 224121 BitCount = 116 ID = 197
0.004825 1 BE Rx d 6 00 00 4D 00 00 00 Length = 202242 BitCount = 105 ID = 190
0.005051 1 D1 Rx d 7 80 00 BF FE 00 FE 00 Length = 218121 BitCount = 113 ID = 209
0.005292 1 C9 Rx d 8 80 2C 5A 60 00 00 18 00 Length = 232242 BitCount = 120 ID = 201
0.005538 1 1C8 Rx d 8 80 00 00 00 FF FE 3F FE Length = 238121 BitCount = 123 ID = 456
0.005774 1 18E Rx d 8 00 00 00 84 78 46 08 45 Length = 228242 BitCount = 118 ID = 398
↧
November 13, 2019, 4:39 am
最近、ようやくtar
コマンドのオプションを調べずに使えるようになってきた。その際、覚えられなかった理由が浮かび、何か役立つかもしれないと思ったので、まとめ、書き留めて置く。
覚えにくかったと思われる理由
オプションが必須
目的に従い、「作成(c)」「取り出し(x)」「表示(t)」等とそれぞれ個別で覚える必要がある。つまり、覚えることが多い。
オプションの意味がわからずに使うことが多い
tar
のコマンドの使い方が紹介されているサイトに記載してあるサンプルはどういうわけか、オプションの「-」を省略しているものが多く、結果的にオプションの意味を理解せずに使うことになりやすい。
例えば、tarファイルを作成する場合
tar-czf{作成ファイル名}{対象ファイルリスト}
これをみて、オプションの-f
で{作成ファイル名}
を指定していて、オプション-c, -z
が操作を示しているとまず読み取れない。
実際、以下の方が頭に入りやすいのではと思う。
tar-c-z-f{作成ファイル名}{対象ファイルリスト}または
tar-f{作成ファイル名}-cz{対象ファイルリスト}
ロングオプションだとよりわかりやすい
tar--create--gzip--file{作成ファイル名}{対象パスのリスト}
他よく使うオプションも比較
# 取り出しtar-xf{対象ファイルパス}tar-x-f{対象ファイルパス}tar--extarct--file{対象ファイルパス}# リスト表示tar-tvf{対象ファイルパス}tar-tv-f{対象ファイルパス}tar--list--verbose--file{対象ファイルパス}
補足
- tarのマニュアルに以下のような記載があることから、ロングオプションでは動かない場合があるかもしれません
There are alternative long options for many of the short options that are deliberately not documented.
短いオプションの殆どは、意図的に文書化されていない代替の長いオプションがあります
ファイル指定方法がオプションと他コマンドと毛色が異なっている
例えば、mv,cp,mkdir
コマンドは下記のように引数で指定
mv{変更対象パス}{変更後パス}cp{コピー元パス}{出力先パス}mkdir{作成ディレクトリ名}
これに対し、tar
コマンドはオプション-f
で指定
# tarファイル作成tar-f{作成ファイル名}-cz{対象パスリスト}# tarファイルの解凍tar-f{対象ファイル}-xz
どうやって覚えたか
下記順序で覚えた。
1. オプションの-f
は基本的にどの操作でも必須なことを覚える
2. オプションの-f
の意味と使い方を覚える
3. マニュアルから、他オプションの意味を覚える
↧
November 13, 2019, 6:49 am
はじめに
最近、ようやく自分のMacBookのOSをCatalinaにアップデートしました。
Catalinaでデフォルトシェルが「Zsh」になることを知っていたので、それに伴って色々動かなくなるんじゃないかと様子見していましたが、それなりに時間も経過したと思うので、実験の意味も含めてアップデートしました。
対応内容
~/.bash_profileの内容を~/.zprofileにコピペ
~/.bash_profile
には、元々Android SDKなどのパス設定を行っていました。
~/.bash_profile
export ANDROID_HOME=/Users/Hitoshi/Library/Android/sdk
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/28.0.3
export PATH="/usr/local/sbin:$PATH"ANDROID_NDK_ROOT=$ANDROID_HOME/ndk-bundle
NDK=$ANDROID_NDK_ROOTexport PATH=${PATH}:$NDKexport PATH=$HOME/.nodebrew/current/bin:$PATHexport PATH=/Library/TeX/texbin:$PATHexport PATH=~/.local/bin:$PATHexport PATH=~/flutter/bin:$PATHexport JAVA_HOME=$(/usr/libexec/java_home -v 1.8)export PATH=${PATH}:$JAVA_HOME/bin
source ~/.bashrc
これに関しては、~/.zprofile
を新規作成し、そこにsource ~/.bashrc
より上の内容をコピペするだけでOKでした。
~/.zprofile
export ANDROID_HOME=/Users/Hitoshi/Library/Android/sdk
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/28.0.3
export PATH="/usr/local/sbin:$PATH"ANDROID_NDK_ROOT=$ANDROID_HOME/ndk-bundle
NDK=$ANDROID_NDK_ROOTexport PATH=${PATH}:$NDKexport PATH=$HOME/.nodebrew/current/bin:$PATHexport PATH=/Library/TeX/texbin:$PATHexport PATH=~/.local/bin:$PATHexport PATH=~/flutter/bin:$PATHexport JAVA_HOME=$(/usr/libexec/java_home -v 1.8)export PATH=${PATH}:$JAVA_HOME/bin
Gitコマンド対応
以下を参考に、コマンド補完&ブランチ名表示を行うようにしました。
Git - ZshでGitを使う
~/.zshrc
autoload -Uz compinit && compinit
autoload -Uz vcs_info
precmd_vcs_info(){ vcs_info }
precmd_functions+=( precmd_vcs_info )
setopt prompt_subst
# RPROMPT=\$vcs_info_msg_0_PROMPT=\$vcs_info_msg_0_'%# '
zstyle ':vcs_info:git:*' formats '%b'
すると、以下のように%
の後ろにブランチ名が表示されるようになります。
![スクリーンショット 2019-11-13 23.47.07.png]()
が、%の前が何も表示されなくなってしまってイマイチ。。
まだZshについてあまり分かっていないので、誰かいい感じの設定方法あれば教えてください。。
参考
新macOS Catalina が zsh を標準にするって聞いたので Mojave のまま移行してみた - Qiita
↧
November 13, 2019, 2:43 pm
↧
↧
November 13, 2019, 8:50 pm
知ってるよって方が大半、百番煎じくらいかと思いますが、主として内輪向けに・・・
単にバックグラウンドで動かしたい場合
最後に&
を付与します。
user@user-VirtualBox:~$sleep 1000 &
[1] 20723
user@user-VirtualBox:~$
もしくは、Ctrl-Z
で一時停止してから、bg
してやります。
user@user-VirtualBox:~$sleep 1000
^Z
[1]+ 停止 sleep 1000
user@user-VirtualBox:~$bg[1]+ sleep 1000 &
user@user-VirtualBox:~$
出力が鬱陶しければ、リダイレクトを使いましょう(割愛)。
端末を閉じても動かし(続け)たい場合
nohup
を使います。
user@user-VirtualBox:~$nohup sleep 1000 &
[1] 20736
user@user-VirtualBox:~$nohup: 入力を無視し、出力を 'nohup.out'に追記します
見ての通り、出力はnohup.out
になされるため、こちらはリダイレクト不要です。
↧
November 13, 2019, 7:32 pm
↧
November 13, 2019, 7:40 pm
ZIPファイル名にドットが1つしか含まれていないという前提
for i in`ls*.zip | awk-F.'{print $1}'`;do unzip $i.zip -d$i;done
↧
November 13, 2019, 7:44 pm
echo"1410325425" | awk'{print strftime("%Y/%m/%d %H:%M:%S",$0)}'# 2014/09/10 14:03:45
↧
↧
November 13, 2019, 7:46 pm
↧
November 13, 2019, 7:47 pm
↧
November 14, 2019, 4:54 pm
自分用メモ
カーソル移動
キー操作 | 内容 |
---|
Ctrl+f | 1文字進む |
Ctrl+b | 1文字分戻る |
Ctrl+a | 行頭に移動 |
Ctrl+e | 行末に移動 |
Esc+f | スペース区切りで1単語分進む |
Esc+b | スペース区切りで1単語分戻る |
文字削除
キー操作 | 内容 |
---|
Ctrl+h | 前1文字削除 |
Ctrl+d | カーソル位置の1文字削除 |
Ctrl+w | カーソル位置からスペース区切りで1単語分削除 |
Ctrl+k | カーソル位置から行末までを削除 |
Ctrl+u | カーソル位置から行頭までを削除 |
↧