月度归档:2017年12月

习惯晚睡


2017年12月31日 10:38:12   2,936 次浏览

很久没有像今天这样坐下来写东西了,也不知道抽的什么风,可能是实在想不到大好的周末能做些什么吧。其实也倒不是心血来潮,最近一段时间都在思考过去,规划以后的方向,零零碎碎的记录了一些,但至今未能成文。但今天不是讲规划,而是——习惯,晚睡的习惯。

很多人可能会反驳晚一点睡算什么,此时不任性何时才任性。我倒不是说晚睡不行,问题是我因何而晚睡。最近一直在看池建强老师的《MacTalk-人生元编程》这本书,无论Apple的联合创始人沃茨,还是微软的艾伦,在初期哪一个不是没日没夜的工作。当然咱无法与这些传奇人物比拟,但至少说明熬夜,要值得,如果我是在熬夜积累自己,或能对改善以后的状况,我就觉得值得。

可是现在我们大多数人熬夜在干嘛呢,包括我也有反思自己。

 

不过较好的一点是没那么严重,平日晚一点到1点,因为考虑到第二天还要上班这样一个事实,一到周末,又毅然决然的熬到凌晨三四点,而大部分情况是在看电影电视,似乎周五的晚上是从11点开始,周六的白天从下午一点开始……

写到这里,我倒不是谴责自己晚睡这样一个习惯,因为我相信肯定还是有很大一部分人跟我一样有着凌晨一点才睡的习惯,更不是告诉自己“熬夜对身体有害”这样一个众所周知的烂道理。有些人熬夜是迫不得已,而有些人是因为三四年时间形成的习惯。熬夜疯一下可以,问题是干什么。有多少人可以熬夜而不用考虑明天。

最近上班没什么特别的工作,拿出不少时间去简书上看看文章,或搜到某个人博客,就闲来无事的点开Archive列表,随机点开看看。看到人家几年来做的点点滴滴,同龄人群里,我却丝毫想不起那时候我在做什么,依旧是同龄人我现在正在学的东西,人家两三年前就在用了。这也不难解释我现在的处境了。不止一次有过努力追赶别人的想法,可是晚上一回到家,不是迷上电视就是电脑手机。回家前我计划要做的事情实施了吗?这样是会有一点点累,过着如此安逸的生活,这不是我应得的。来自家里的压力,我应该是努力在工作技能上积累,在生活情商上积累,而我没那么多时间,慢慢来…

一个人的努力是孤独的,也是幸运的。毫无理由的晚睡,第二天迷迷糊糊起床,这不是我想要的状态。想要有所作为,可能就因为一个不经意的习惯而磨损了自己的动力。

我想象这样一个场景:

  • 早上提前30分钟(七点)起来,轻轻松松的洗漱,打扮,然后从容的吃个早饭,车上看看知乎。
  • 上班时间,没事少刷朋友圈,早中晚看几次就行了。中午看看新闻,午休一觉,快速进入工作状态,不能再迷糊半个小时(这也成习惯了吧)。
  • 下午三四点上班累了,走动走动,聊聊天,打打水。眼睛酸了,滴滴眼药水(买了别浪费)
  • 晚上下班车上,听听歌。
  • 10点以后是自己的时间,我可以舒舒服服的洗个澡,不开电脑,然后看一个半小时的书,或者看看新闻和喜欢的节目。
  • 周末,九点钟起来。偶尔聚聚,逛逛,但至少拿出一天时间去图书馆,看看电影什么的,家里真不适合学习、阅读。

有人会说,不就是晚睡而已吗,至于这样吗,功利性太强了!

就我目前各方面不稳定因素来说,我觉得有必要这样一个list。把平时和睡前那些零碎时间利用起来,安安静静的坚持多看几书,不再拘泥于自己知道的小圈子,才会发现更多机会。

——闹钟真是一个伟大的发明,它让你放心的入睡,也无情的把你叫醒,为了减轻你的埋怨还允许你贪睡。

 

高效Linux bash快捷键及alias总结


2017年12月31日 10:18:59   1,287 次浏览

bash快捷键

习惯使用编辑的快捷键可以大大提高效率,记忆学习过程要有意识的忽略功能键、方向键和数字小键盘。以下快捷键适用在bash处于默认的Emacs模式下,是由一个名为Readline的库实现的,用户可以通过命令bind添加新快捷键,或者修改系统中已经存在的快捷键。(如果你有set -o vi,就处于 vi 模式就不适用了)

另外下面的内容并不包含所有快捷键,只是我个人适用频率最高的几种,但相信已经可以大大提高工作效率了。以下所有 Alt 键可以以 Esc 键代替。

  • Ctrl + l :清除屏幕,同clear
  • Ctrl + a :将光标定位到命令的开头
  • Ctrl + e :与上一个快捷键相反,将光标定位到命令的结尾
  • Ctrl + u :剪切光标之前的内容,在输错命令或密码
  • Ctrl + k :与上一个快捷键相反,剪切光标之后的内容
  • Ctrl + y :粘贴以上两个快捷键所剪切的内容。Alt+y粘贴更早的内容
  • Ctrl + w :删除光标左边的参数(选项)或内容(实际是以空格为单位向前剪切一个word)
  • Ctrl + / :撤销,同Ctrl+x + Ctrl+u
  • Ctrl + f :按字符前移(右向),同→
  • Ctrl + b :按字符后移(左向),同←
  • Alt + f :按单词前移,标点等特殊字符与空格一样分隔单词(右向),同Ctrl+→
  • Alt + b :按单词后移(左向),同Ctrl+←
  • Alt + d :从光标处删除至字尾。可以Ctrl+y粘贴回来
  • Alt + \ :删除当前光标前面所有的空白字符
  • Ctrl + d :删除光标处的字符,同Del键。没有命令是表示注销用户
  • Ctrl + h :删除光标前的字符
  • Ctrl + r :逆向搜索命令历史,比history好用
  • Ctrl + g :从历史搜索模式退出,同ESC
  • Ctrl + p :历史中的上一条命令,同↑
  • Ctrl + n :历史中的下一条命令,同↓
  • Alt + .:同!$,输出上一个命令的最后一个参数(选项or单词)。
    还有如Alt+0 Alt+. Alt+.,表示输出上上一条命令的的第一个单词(即命令)。
    另外有一种写法 !:n,表示上一命令的第n个参数,如你刚备份一个配置文件,马上编辑它:cp nginx.conf nginx.confvi !:1,同vi !^!^表示命令的第一个参数,!$最后一个参数(一般是使用Alt + .代替)。

这里提一下按字符或字符串,向左向后搜索字符串的命令:

  • Ctrl + ] c :从当前光标处向定位到字符 c 处
  • Esc Ctrl + ] c :从当前光标向定位到字符 c 处。( bind -P 可以看到绑定信息)
  • Ctrl + r str :可以搜索历史,也可以当前光标处向定位到字符串 str,Esc后可定位继续编辑
  • Ctrl -s str :从当前光标处向定位到字符串 str 处,Esc 退出。注意,Ctrl + S默认被用户控制 XON/XOFF ,需要在终端里执行stty -ixon或加入profile。

注意上述所有涉及Alt键的实际是Meta键,在xshell中默认是没有勾选“Use Alt key as Meta key”,要充分体验这些键带来的快捷,请在对应的terminal设置。

参考高效操作BashBash (Unix shell) Keyboard shortcutsbash中的命令基本操作

常用alias

以下bash中别名设置我还并没有完全使用,也是个人觉得非常有用的(多了记起来也麻烦),所以收集在一起,习惯就好。
/etc/profile.d/alias.sh

alias wl='ll | wc -l'
alias l='ls -l'
alias lh='ls -lh'
alias grep='grep -i --color' #用颜色标识,更醒目;忽略大小写
alias vi=vim
alias c='clear' # 快速清屏
alias p='pwd'
# 进入目录并列出文件,如 cdl ../conf.d/
cdl() { cd "$@" && pwd ; ls -alF; }
alias ..="cdl .."
alias ...="cd ../.." # 快速进入上上层目录
alias .3="cd ../../.."
alias cd..='cdl ..'
# alias cp="cp -iv" # interactive, verbose
alias rm="rm -i" # interactive
# alias mv="mv -iv" # interactive, verbose
alias psg='\ps aux | grep -v grep | grep --color' # 查看进程信息
alias hg='history|grep'
alias netp='netstat -tulanp' # 查看服务器端口连接信息
alias lvim="vim -c \"normal '0\"" # 编辑vim最近打开的文件
alias tf='tail -f ' # 快速查看文件末尾输出
# 自动在文件末尾加上 .bak-日期 来备份文件,如 bu nginx.conf
bak() { cp "$@" "$@.bak"-`date +%y%m%d`; echo "`date +%Y-%m-%d` backed up $PWD/$@"; }
# 级联创建目录并进入,如 mcd a/b/c
mcd() { mkdir -p $1 && cd $1 && pwd ; }
# 查看去掉#注释和空行的配置文件,如 nocomm /etc/squid/squid.conf
alias nocomm='grep -Ev '\''^(#|$)'\'''
# 快速根据进程号pid杀死进程,如 psid tomcat, 然后 kill9 两个tab键提示要kill的进程号
alias kill9='kill -9';
psid() {
[[ ! -n ${1} ]] && return; # bail if no argument
pro="[${1:0:1}]${1:1}"; # process-name –> [p]rocess-name (makes grep better)
ps axo pid,user,command | grep -v grep |grep -i --color ${pro}; # show matching processes
pids="$(ps axo pid,user,command | grep -v grep | grep -i ${pro} | awk '{print $1}')"; # get pids
complete -W "${pids}" kill9 # make a completion list for kk
}
# 解压所有归档文件工具
function extract {
if [ -z "$1" ]; then
# display usage if no parameters given
echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
else
if [ -f $1 ] ; then
# NAME=${1%.*}
# mkdir $NAME && cd $NAME
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.tar.xz) tar xvJf $1 ;;
*.lzma) unlzma $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x -ad $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*.xz) unxz $1 ;;
*.exe) cabextract $1 ;;
*) echo "extract: '$1' - unknown archive method" ;;
esac
else
echo "$1 - file does not exist"
fi
fi
}
# 其它你自己的命令
alias nginxreload='sudo /usr/local/nginx/sbin/nginx -s reload'


要去掉别名,请用unalias aliasname,或者临时执行不用别名,执行原始命令\alias

vim编辑器技巧备忘(初级-中级)


2017年12月31日 10:10:57   1,258 次浏览

“学习vim并且其会成为你最后一个使用的文本编辑器”
学习建议:

丢弃鼠标和小键盘
具有搭配使用各种按键的意识

 

 

 

1. 初级

1.1 编辑模式(Insert Mode)

编辑模式包括以下动作:

  • insert:i在光标所在字符前插入,I在当前行首第一个非空格字符前插入
  • append:a在光标所在字符后插入,A在行末尾开始插入
  • open:o在下一行插入新行,O在光标所在行的上一行插入新行
  • replace:r将光标处字符替换成r紧接的字符;R一直替换字符串,知道ESC键退出,同windows下的Insert键
  • Ctrl+p:自动提示
  • [ESC]:回到普通模式

 

 

1.2 普通模式(Normal Mode)

  • h, j, k, l,分别对应 左← 下↓ 上↑ 右→
  • :q, :q!, :wq 退出 不保存强行退出 保存退出
  • 移动光标到当前行首/非空格,同^,:0
  • $ 移动光标到当前行尾,同:$
  • G 移动光标到文档最后一行首
  • 30G 转到第30行,同 :30
  • 9- 光标向上移动9行,同9k
  • 9+ 光饼向下移动9行,同9[space],9j
  • gg 转到文档第一行(1G)
  • H 移动到屏幕的第一列
  • M 移动到屏幕的中间列
  • L 移动到屏幕的最后列
  • w 移动到下一个单词的首字母,(标点符号认为是一个单词,W表示单词以空格分隔)
  • e 移动到下一个单词的末尾,(E认为单词以空格分隔)
  • b 移动到上一个单词的首字母,(B认为单词以空格分隔)
  • fx 移动到下一个字母是x的位置。Fx向上移动。
  • % 匹配括号移动,包括 (, {, [ ,你需要把光标先移到括号上
  • CTRL+b 向上(前)翻页
  • CTRL+f 向后翻页
  • d 删除开始。其实是放到寄存器中,p或P命令调用。c即change,删完进入编辑模式
  • d$ 删除光标到行尾的所有文字,同D。C指令进入编辑模式
  • dw 删除当前字符到单词尾的所有字符。cw删除光标后的单词并进入插入模式,等同替换
  • dd 删除当前一行
  • 2dd 删除当前两行
  • x 剪切光标处字符,可以p粘贴出来
  • y 复制开始。yank起来,p或P命令调用
  • yy p 复制当前行并粘贴到下一行
  • 5yy p 复制当前行以下5行,在合适的地方粘贴
  • yw p 复制一个单词并粘贴。
  • yi{ 复制光标所在{}中的内容。很容易知道ci{ 和 di “ 的意思。
  • u 撤销
  • CTRL+r 重做
  • . 点号重复做上一个命令
  • `. 移动光标到上一次的修改点
  • Ctrl+g 查看我当前位置

1.3 命令模式

  • /word 向下查找word,n定位到下一个。?word 向上开始查找,同 /word 配合N。* 直接查找光标所在处单词
  • :%s/word1/word2/g 替换所有 word1 为 word2 (^$ [])
  • :set noic 区分大小写 (即set no igorecase,set ic不区分大小写)
  • :set nu 显示行号。:set nonu相反,不显示行号
  • :set paste 设置为粘贴模式,解决Ctrl+Insert粘贴时缩进错乱问题。:set nopaste设置回默认
  • :se ff=unix 设置文本文件的格式为unix,去掉windows系统文件中的^M。
  • :!ls 执行bash下的命令ls,回车后继续回到vi。一般在一个不存在的目录中创建文件时用到
  • :set all 查看vim说有设置属性值
  • :map 查看绑定的快捷键
  • :marks 查看可用标记

熟练上面的命令,已经可以满足日常工作要求,要提高效率可以学习vim的高级用法,如分屏显示、分页、标签功能、代码折叠、键盘映射。

1.4 可视化模式

visual mode多用于用键盘灵活选择文本。vV键进入,可以实现同时编辑多行(如注释)

2. 中级

2.1 高级组合命令

  • :sh 暂时离开vi,进入shell命令行
  • :!ls !表示要执行一个shell命令
  • q: 调出历史命令窗口
  • cc 替换一行,清空一行
  • cw 替换一个单词,进入插入模式
  • ea 在当前单词最后插入
  • vw visual模式选择一个单词
  • VU 全选一行,转换成大写
  • :5,12 co 13 将5至12行复制到第13行下
  • gg=G 自动缩排文件
    % : 匹配括号移动,包括 (, {, [. ,你需要把光标先移到括号上
    *#:匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)

当光标在( ), [ ],< >, { }, " ", '' 内时,可以用ci, di, 或yi,加上(, [, <,{, ", '。这样可以改写/删除/复制( )内,[ ]内,< >内,{ }内," "内,' '内的内容

多行注释(块操作)

  1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;
  2. 在行首使用上下键kj选择需要注释的多行;
  3. 按下键盘(大写)I键,进入插入模式;
  4. 然后输入注释符(“//”、“#”等);
  5. 最后按下esc

删除多行开头的一个字符与此类似,删除多个字符也只要左右键,然后使用d。

另外一种多行注释的方式就是替换:

  • :5,9s/^/#/g 添加注释#
  • :5,9s/^#//g 删除注释#
  • :5,9s#^#//#g 添加注释//,同:5,9s/^/\/\/#/g
  • :5,9s#^//##g 删除注释//

多行缩进
[ESC], Ctrl+v 选择行 <或>左右缩进,=自动缩进(gg=G的局部功能)

多行行末尾加上 >> ${log}:Ctrl+v /^echo
>>相当于tab键,一个缩进

多行删除

  1. 首先在命令模式下,输入set nu显示行号;
  2. 通过行号确定你要删除的行;
  3. 命令输入:32,65d,回车键,32-65行就被删除了

自动补全
在Insert模式下,你可以输入一个词的开头,然后按 <C-p>或是<C-n>,自动补齐功能就出现了

2.2 分屏(split)

分割窗口(同时编辑多个文件)

  • vi -o file1 file2 水平分屏,也可以在先打开file1后,使用:sp file2
  • vi -O file1 file2 垂直分屏,也可以在先打开file1后,使用:vsp file2
  • Ctrl+w w 光标切换到另一个屏
  • k 关闭当前窗口,如果有改动则提示要先保存。:wqa!保存退出所有文件
  • Ctrl+w v 左右分割当前打开的文件。Ctrl+w s上下分割显示
  • Ctrl+w H 左移该屏(大写,L右移,K上移—改变vertical为horizontal)
  • :set scb 分屏同步滚动

另外一种不分屏,同时编辑多个文件的方法

vi file1 file2

  • :ls 展示全部打开的文档。其中 % 代表正在打开的文件(buffer),# 代表上一个编辑过的文件,a 代表当前激活的buffer空间,+ 代表有修改过的内容但还未保存
  • :buffer 2 转到打开的第二个文件。或简写为 :b2
  • :bn 转到下一个文件。没有保存不能离开这个文件。:bp 上一个文件
  • :b# 转到上一个编辑过的文件,同 :e #。类似于多屏中Ctrl+w w
  • :e file3 编辑一个新的文件
  • Ctrl+g 显示当前文件名和行号,同 :f

2.3 折叠(fold)

主要应用在复杂脚本的场合,特别是函数比较多,逻辑结构比较复杂的代码。(:help folding
有6种方式来折叠代码

  1. manual //手工定义折叠
  2. indent //用缩进表示折叠
  3. expr  //用表达式来定义折叠
  4. syntax //用语法高亮来定义折叠
  5. diff //对没有更改的文本进行折叠
  6. marker //用标志折叠

indent
:set foldmethod=indent 设置缩进折叠,fdm为简写。只对当前会话有效,要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=indent

  • zc 折叠与当前缩进相同的行
  • zo 打开折叠
  • zj 移到下一个折叠处
  • zk 移到上一个折叠处
  • zm 折叠所有可折叠标记
  • zr 展开所有折叠
  • [z 到当前打开折叠的开始
  • ]z 到当前打开折叠的结束

marker
注意与后文的mark不是同一东西,:set fdm=marker

  • zf 创建marker,默认 # { { {, # } } }
  • Ctrl+v zf 进入可视化模式,选择需要折叠的行,zc执行折叠。会自动加入 # { { { code block # } } }
  • zf9j 创建从当前行起至以下9行的折叠标记,zc进行折叠。同9zf。类似有zf30G,从当前行折叠刀第30行
  • zf% 创建匹配的 {}, [], (), <> 的fold。不用执行zc
  • zd 删除当前行上存在的折叠标记。仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效

2.4 标记

标记(mark)是vim提供的精确定位技术,只要你知道标记的名字,就可以使用命令直接跳转到该标记所在的位置。vim中的标记都有一个名字,这个名字用单一的字符表示。大写和小写字母(A-Za-z)都可以做为标记的名字,这些标志的位置可以由用户来设置;而数字标记0-9,以及一些标点符号标记,用户不能进行设置,由vim来自动设置。(:help mark-motions查看更多帮助)

  • ms 定义一个标记s
  • `s 跳转到标记s的地方
  • 's 跳转到调剂s所在行首
  • `. jump to position where last change occurred in current buffer
  • “ jump back (to position in current buffer where jumped from)
  • :delmarks aA 使用 :delmarks! 删除所有小写(a-z)的标记
  • :marks 查看所有标记

 

成长之路


2017年12月02日 22:13:24   2,890 次浏览

1、坚持

学习是一个很漫长的过程,是我们每个人需要用一生去坚持的事业。
贵在坚持,难在坚持,成在坚持!

2、目标

没有目标的不叫工作,没有量化的不叫目标
每到一个阶段,制定一个目标

3、分享

学会分享,技术的价值在于能有效地将知识传递到外界,让更多的人知道它。
只要人人都拿出一点东西来,想想会变成什么样?

只要方向对了,就不怕路远了。