Operation,  Other

Shell 及 Vim(vi) 高级玩儿法设置

Shell 及 Vim(vi) 高级玩儿法设置

1. Shell

1.1 效率快捷键

日常操作在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率。

  • 编辑命令
Ctrl + a :移到命令行首     ★★★★★
Ctrl + e :移到命令行尾     ★★★★★
Ctrl + f :按字符前移(右向)
Ctrl + b :按字符后移(左向)
Alt + f :按单词前移(右向)
Alt + b :按单词后移(左向)
Ctrl + xx:在命令行首和光标之间移动
Ctrl + u :从光标处删除至命令行首
Ctrl + k :从光标处删除至命令行尾
Ctrl + w :从光标处删除至字首     ★★★★★
Alt + d :从光标处删除至字尾
Ctrl + d :删除光标处的字符     ★★★★★
Ctrl + h :删除光标前的字符
Ctrl + y :粘贴至光标后
Alt + c :从光标处更改为首字母大写的单词
Alt + u :从光标处更改为全部大写的单词     ★★★★
Alt + l :从光标处更改为全部小写的单词     ★★★★
Ctrl + t :交换光标处和之前的字符
Alt + t :交换光标处和之前的单词
Alt + Backspace:与 Ctrl + w ~~相同~~类似,分隔符有些差别 [感谢 rezilla 指正]
  • 删除命令
dd:删除当前整行
D :删除从当前光标到行尾
d0 :删除从当前光标到行首
db :删除从当前光标到前一个单词
de :删除从当前光标到后一个单词
  • 重新执行命令
Ctrl + r:逆向搜索命令历史     ★★★★★
Ctrl + g:从历史搜索模式退出
Ctrl + p:历史中的上一条命令
Ctrl + n:历史中的下一条命令
Alt + .:使用上一条命令的最后一个参数
  • 控制命令
Ctrl + l:清屏     ★★★★★
Ctrl + o:执行当前命令,并选择上一条命令
Ctrl + s:阻止屏幕输出
Ctrl + q:允许屏幕输出
Ctrl + c:终止命令     ★★★★★
Ctrl + z:挂起命令
  • Bang (!) 命令
!!:执行上一条命令
!blah:执行最近的以 blah 开头的命令,如 !ls
!blah:p:仅打印输出,而不执行
!$:上一条命令的最后一个参数,与 Alt + . 相同
!$:p:打印输出 !$ 的内容
!*:上一条命令的所有参数
!*:p:打印输出 !* 的内容
^blah:删除上一条命令中的 blah
^blah^foo:将上一条命令中的 blah 替换为 foo
^blah^foo^:将上一条命令中所有的 blah 都替换为 foo

1.2 高效查找替换

vim 有着强大的替换和查找功能,若能进行熟练的运用,可以让工作效率得到一个很大程度的提高.

  • 常用示例
# 将当前行第一个a替换为b
:s/a/b/

# 将当前行的所有a替换为b
:s/a/b/g

# 将每行第一个a替换为b
:%s/a/b

# 将整个文件的所有a替换为b
:%s/a/b/g

# 将1至3行的第一个a替换为b
:1,3s/a/b/

# 将1至3行的所有a替换为b
:1,3s/a/b/g

# 使用#作为分隔符,此时中间出现的/不会作为分隔符,如:将当前行的字符串"a/"替换为"b/"
:s#a/#b/#

# 找到包含字母a的行并删除
:g/a/d

# 删除所有空行
:g/^$/d

# 多个空格替换为一个空格
:s/ \+/ /g

# 在正则表达式中使用和符号括起正则表达式,即可在后面使用\1,\2等变量来访问和中的内容,如下将data1 data2修改为data2 data1
:s/\w\+\s\+\w\+/\2\t\1

2. Vim / Vi

2.1 效率快捷键

2.2 简单个性化

仅设置 Tab 为 4 个 Space

# Generating virc custom configuration.
cat <<-'EOF' >>/tmp/.virc.tmp
" ----- Custom settings. -----
" 1. Replace tab to space
:set ts=2
:set expandtab
:%retab!
" 2. Replace space to Tab
":set ts=2
":set noexpandtab
":%retab!
EOF
# Add custom.
cat /tmp/.virc.tmp >> /etc/virc
cat /tmp/.virc.tmp >> /etc/vimrc

2.3 高级个性化

# 下载vim配置文件
sudo curl -sSL -o /tmp/vimrc.tmp https://gitee.com/wl4g/blogs/raw/master/docs/articles/operation/shell-vim-advanced-setting/resources/vimrc

# e.g CentOS7
[ -f /etc/vimrc ] && cp /etc/vimrc /etc/vimrc.bak && cat /tmp/vimrc.tmp > /etc/vimrc
[ -f /etc/virc ] && cp /etc/virc /etc/virc.bak && cat /tmp/vimrc.tmp > /etc/virc

# e.g Ubuntu 20+
[ -f /etc/vim/vimrc ] && cp /etc/vim/vimrc /etc/vim/vimrc.bak && cat /tmp/vimrc.tmp > /etc/vim/vimrc
[ -f /etc/vim/virc ] && cp /etc/vim/virc /etc/vim/virc.bak && cat /tmp/vimrc.tmp > /etc/vim/virc
  • 效果图

2.4 其他特别个性化

  • 例如,设置 vim 编辑时高亮的行、列的颜色
" 开启高亮光标行
set cursorline
hi CursorLine   cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white
" 开启高亮光标列
set cursorcolumn
hi CursorColumn cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white
  • 其中 CursorlineCursorColumn 分别表示光标所在的行和列,根据一般用户的习惯,高亮行就可以了(我试过高亮列,看起来异常不协调,哈哈哈,有兴趣的可以试试),可以把 darkred, white 等换成你喜欢的颜色。另附上vim官网关于高亮显示当前行的tip

  • Vim 识别三种不同的终端: term 黑白终端、cterm 彩色终端、gui Gvim窗口。

    • term: 可以定义其字体显示有 boldunderlinereverseitalicstandout。例如以下命令,用逗号来组合使用这些属性: :highlight Keyword term=reverse,bold

    • cterm: 可以用 ctermfg 设置前景色,用 ctermbg 设置背景色。例如以下命令,定义蓝底红字并使用下划线来显示释: :highlight Comment cterm=underline ctermfg=red ctermbg=blue

    • gui: 可以使用选项 gui=attribute,来定义图形窗口下语法元素的显示属性。选项guifg和guibg,用来定义了前景色和背景色。推荐使 用的颜色包括: black, brown, grey, blue, green, cyan, magenta, yellow, white

3. 相关参考

3.1 Linux shell 生成随机范围数

# 方式 1 (根据bash手册页,0 < $RANDOM < 32767)
echo $(($RANDOM%2000+1000))

# 方式 2
echo $(shuf -i 2000-3000 -n 1)

# 方式 3 (在 Mac OS X 和 FreeBSD 上)
jot -r 1 2000 3000

# 方式 4
echo $(python -S -c "import random; print random.randrange(2000,3000)")

3.2 Linux shell 实现队列并发任务

3.3 shell 递归查找

grep '/footer.php' . -R

留言

您的电子邮箱地址不会被公开。