因为管理多个服务器,经常需要在多个服务器上切换工作,对于多个shell窗口需要识别,所以想到为不同的 server 订制 hostname, 从而便于快速识别.

修改hostname

查看 hostname

在 shell 中输入 hostname 即可.

hostname

设置 hostname

hostname New_HOSTNAME , 会立即生效.

hostname NEW_NAME

因为我使用了 oh_my_zsh , 虽然生效了,但是 shell 中并未直接显示出来, 肿么办?

修改 oh-my-zsh 的 themes

打开 root/.oh-my-zsh/themes 目录, 修改 themes 中在 ~/.zshrc 中选定的 theme 文件.

cp ~/.oh-my-zsh/themes/robbyrussell.zsh-theme ~/.oh-my-zsh/themes/nosun.zsh-theme
vi ~/.oh-my-zsh/themes/nosun.zsh-theme

将 PROMPT 修改为:

PROMPT='%{$fg[magenta]%}%n%{$reset_color%}@%{$fg[yellow]%}%m%{$reset_color%} ${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'

保存退出之后

修改配置文件

vi ~/.zshrc // 将 themes 修改为 `nosun`

输入命令 zsh 即可生效.

最近使用 laravel 做管理后台, 需要在编辑器中实现图片上传功能, 刚开始使用的是 ckeditor , 但是在做图片上传功能时有遇到一些问题(ckeditor 将图片上传这块的前端代码以及json格式设定了,不太好.), 最终尝试使用 TinyMCE 编辑器.

tinyMCE 编辑器的界比较简洁, 文档也比较易读, 但是具体到上传文件这块, 看了半天还是没有理清头绪, 最终在网上找到一个例子, 照猫画虎的实现了.

首先, 我们为 tinyMce 编辑器初始化, 参数大概是这样的:

tinymce.init({
selector: "#content",
theme: "modern",
menubar:false,
min_height: 400,
paste_data_images: true,
plugins: [
    "advlist autolink lists link image charmap print preview hr anchor pagebreak",
    "searchreplace wordcount visualblocks visualchars code fullscreen",
    "insertdatetime media nonbreaking save table contextmenu directionality",
    "emoticons template paste textcolor colorpicker textpattern"
],
toolbar: "insertfile undo redo | styleselect | bold italic | " +
"alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | code",
image_advtab: false,
file_browser_callback: function(field_name, url, type, win) {
    var fileBrowser = "{{route('upload.images') }}";
    fileBrowser += (fileBrowser.indexOf("?") < 0) ? "?type=" + type : "&type=" + type;
    fileBrowser += '&editor=tinymce';
    tinymce.activeEditor.windowManager.open({
    title : "Insertar fichero",
    width : 600,
    height : 500,
    url : fileBrowser
    }, {
    window : win,
    input : field_name
    });
}
});

第一个要点: 是设定 file_browser_callback: 这个回调函数, 设定了点击浏览的 button 时弹出浏览图片的窗口.

我使用的是 laravel, 我设定了一个 url , 这个 url 是使用 laravel mvc 渲染出来的一个图片列表页面, 在这个列表页面中,可以设定对图片的 增加,删除操作等功能. 我们这个设定的主要意图, 就是为了弹出这个资源窗口, 让用户可以在这个资源窗口中选图片.

第二个要点: 是设定当用户选中图片时, 把图片的 url 信息传递会 input 框, 这个操作实际上也非常简单, 因为 tinyMce 弹出的窗口实际上是一个对话框, 对话框中嵌入了 iframe, 我们传值回来即可, 核心的 代码如下:

$(document).on('click', '.js-image-link', function () {
     var url  = $(this).attr('src');
     var args = top.tinymce.activeEditor.windowManager.getParams();
     var input  = args.input;
     args.window.document.getElementById(input).value = url;
     top.tinymce.activeEditor.windowManager.close();
}

做到这里, 其实我们的图片管理就已经完成了.

参考:(https://www.morethanweb.es/en/news/how-to-implement-a-file-loader-in-tinymce-4.html)

转自:http://hackll.com/2015/04/12/20-vim-tips/

我是 Vim 的忠实用户,从开始编程起,就使用 Vim 作为编辑器。在我看来,Vim 的强大之处有三:

快速定位;
宏;
不计其数的插件。

在使用 Vim 的过程中,我从社区学习到很多有用的技巧,自己也总结和掌握了一些。正是这些技巧让我得以在个人的编程经验中,还算得心应手地使用 Vim。本文是我对自己平常使用的一些用法技巧的分享,这些技巧不借助任何插件,全部是 Vim 本身提供的功能。(当然这绝不是在否定插件的作用,只是说,编辑器本身可以提供或者达到的效果,则尽管用,keep it simple。)

  1. 快速 esc

    模式:insert
    按键:<C-[>
    说明:返回到 normal 模式,等于按下 esc。

  2. 翻页

    模式:normal
    按键:<C-f> / <C-u>
    说明:向下/向上翻页。

  3. 交换字符

    模式:normal
    按键:xp
    说明:交换两个字符位置。
    引申:ddp 交换两行位置。

  4. 搜索 word

    模式:normal
    按键:* 说明:光标在一个 word 中间时,按下星号 * 能向下搜索这个 word;之后再按 n 跳到下一个,N 跳到上一个匹配位置。
    引申:井号 # 向上搜索这个 word。

  5. 替换 word

    模式:normal
    按键:cw
    说明:替换当前 word,即删除当前 word 并进入 insert 模式。实际上,上述说法只适用于这种情况:光标处于 word 的开始字符处。如果光标处于 word 中间,那么该命令将删除光标至 word 结束字符处之间的字符,并进入 insert 模式。

  6. 重复操作

    模式:normal
    按键:.
    说明:重复上一个操作。比如,技巧 4 中使用 * 或 # 搜索到的 word ,如果想替换这些 word ,那么可以使用 cw 替换掉,之后再按 n/N 跳到下一个希望替换的 word 那里,接着按 . 就会重复之前的替换了。

  7. 全局替换

    模式:normal
    按键::g/pat1/s//pat2/g / :%s/pat1/pat2/g
    说明:全局替换,将整个文档中的 pat1 全部替换为 pat2。

  8. 局部替换

    模式:visual
    按键::s/pat1/pat2/g
    说明:将选中区域内的 pat1 全部替换为 pat2。

  9. 替换行

    模式:normal
    按键:cc / S
    说明: 替换整行,也就是删除当前整行并进入 insert 模式。

  10. 改变大小写

    模式:normal
    按键:~
    说明:改变当前字符的大小写。在 visual 模式下,改变所选字符的大小写。
    引申:u 和 U 分别将选中字符变为小写和大写。

  11. 跳到上一位置

    模式:normal
    按键:`'
    说明: 跳到上一个位置,会更新 jump 的历史,也就是说,多次使用该命令会在两个位置之间跳来跳去。
    引申:<C-o> 也可以跳到上一个位置,不过它不会更新 jump 历史,会一直跳到文件关闭为止。

  12. 标记位置

    模式:normal
    按键:ma
    说明:将当前位置标记为 a,之后可以按 `a 跳到此位置。a 可以为其他字母。

  13. 多行操作

    模式:visual block(意即使用 <C-v> 选中的)
    按键:I
    说明:选中字符区域后,按 I 进入 insert 模式(光标处在选中区域的第一行),输入一些字符,按 esc 返回到 normal 模式,则针对第一行所作的操作将反映到所有选中的行上。这一技巧常用于多行注释(当然也有不少插件的多行注释更好用)。

  14. redo

    模式:normal
    按键:<C-r>
    说明:redo,重新应用 u 命令所撤销的操作。

  15. 替换字符

    模式:normal
    按键:r
    说明:替换当前字符,比如 ra 可以将当前字符替换为 a。
    引申:cl 可以删除当前字符并进入 insert 模式。

  16. 快速缩进

    模式:visual
    按键:> / <
    说明:向右/左缩进。
    引申:mormal 模式可以 >> / << 来分别向右/左缩进当前行。

  17. 分割窗口

    模式:normal
    按键::sp
    说明:将当前窗口分割为两个,当然每个窗口的 buffer 还是同一个文件。

  18. 括号跳转

    模式:normal
    按键:%
    说明:当光标处字符为 ()[]{} 中任意一个时,按下 % 可以跳到括号的另一半处。

  19. sudo 保存

    模式:normal
    按键::w !sudo tee %
    说明:不小心打开了一个需要 sudo 的文件,而且做了不少更改?这条命令可以挽救。完整解释可参看 这里。

  20. 模式:normal
    按键:q
    说明:纪录宏。将多处相似的更改抽象为一个可共用的操作,能够节省大量时间。比如,按下 qa 开始记录,接着进行所需的操作,按下 q 结束。此时再到其他需要更改的区域,按下 @a 把刚才宏记录的操作应用到这一区域。另外,[email protected] 或 @na 将会把宏 a 重复 n 次,n 可以为任意数字。

最后说一下关于 vimrc,个人愚见,别人的配置文件未必百分百适合自己,用一句时髦的话说,Vim 也是“需要调教”的。当然,一些公认的好习惯还是可以强迫自己去适应的,剩下的就需要自己慢慢摸索,慢慢总结了,最终找到自己觉得最舒服的使用方式。

~/.bashrc 是在你的home目录下的一个隐藏文件,每次进入shell,都会加载这个配置. 当然,如果你用的不是系统自带的shell, 比如用的zsh, 那么默认加载的配置文件就是 ~/.zshrc

在 shell下,你需要使用许多命令, 这些命令很多, 输入长命令比较繁琐, 这个时候你可以在 .bashrc 中通过设置别名的方式,将命令做映射.

让我们看一个例子

alias ll='ls -l'

这样, 当我们在命令行中输入 ll 的时候, 就相当于输入了命令 ls -l, 使得输入命令更加方便快捷.

还有一种情况, 我希望一个命令替换系统的默认命令,比如:

alias vi='vim'

这样, 当我们在 shell 中输入 vi 的时候, 会自动调用系统的 vim 编辑器, 对于我来说,这个功能很好很实用.

enviroment

  • install racket:http://racket-lang.org/download/

quick start

  • http://docs.racket-lang.org/quick/index.html
  • http://www.ccs.neu.edu/home/matthias/HtDP2e/

resource

  • http://sicp.readthedocs.io/en/latest/
  • http://my.oschina.net/zhoukuo/blog/349453
  • https://www.douban.com/group/topic/8223222/