1

点赞

0

回复

699

浏览

用 Cron 定时任务更新Mac壁纸

最近看到 Set Desktop to NASA Astronomy Picture of the Day https://www.macosxautomation.com/automator/apod/index.html 一文,这个OSX下的Automator脚本可以每天自动去NASA(美国宇航局)下载“每日一图”,并设置为桌面。居然有这么酷的事情!于是harttle按照这篇文章的指示,完成了这个脚本。 第二天早上发现壁纸自动更新时harttle真是兴奋不已,然而第三天壁纸却没有更新... harttle也找不到Automator的日志在哪里,后来发现日历中的Automator触发器失效了?无奈之下,harttle又回到了Linux Way:使用 Cron 定时任务更新壁纸。现在稳定多了! 下载壁纸脚本 !/usr/local/bin/bash...

vimbash

0

点赞

0

回复

884

浏览

用Ag/Ack在Vim中搜索项目代码

Ag http://en.wikipedia.org/wiki/Silver (The Silver Searcher)和 Ack http://beyondgrep.com/ 都是CLI的全局搜索工具,其中Ag更快一些,而Ack也比Vim自带的grep快很多。这些工具的Vim插件可以通过Vim Quickfix窗口来提供代码搜索的结果。 本文便来详细介绍如何在Vim中使用Ag全局搜索。 那么什么是Quickfix窗口呢? Quickfix http://vimdoc.sourceforge.net/htmldoc/quickfix.html quickfix 是Vim的一个特殊编辑模式,该模式的提出最初是受启发于Aztec C编译器: 把编译错误写入一个文件中,然后从这个文件一一跳转到对应出错的源文件。 安装AG Ag是一个命令行工具,用来全局搜索代码文件。 除了速度快之外,还会自动排除 .gitignore , .hgignore 里排除的文件。 当然你可以在 agignore 中设置其它要排除的文件。现在来安装它: OSX...

vim

0

点赞

0

回复

765

浏览

Vim 多文件编辑:缓冲区

感谢 idear http://tianmaying.com/user/idear 网友的支持,现在把"Vim多文件编辑"的最后一篇文章更新上来了!本文介绍Vim下缓冲区(Buffer)的使用, 至于标签页(tab)、窗口(window)可以移步另外两篇文章: Vim 多文件编辑:标签页 http://tianmaying.com/tutorial/vim tabpage 和 Vim 多文件编辑:窗口 http://tianmaying.com/tutorial/vim window 引用Vim官方解释,缓冲区是一个文件的内容占用的那部分Vim内存: A buffer is an area of Vim's memory used to hold text read from a file. In addition, an empty buffer with no associated file can be created to allow the entry of text. vim.wikia http://vim.wikia.com/wiki/Buffers 先来回顾一下Tab,Window,Buffer的关系吧! 基于缓冲区的多文件编辑是Vim最为推荐的做法,Vim维护着你在当前打开的这些Buffer里的所有跳转, Ctrl+o 和 Ctrl+i 可以遍历这些光标位置(参考: 在Vim中进行快速光标移动 http://harttle.com/2015/11/07/vim cursor.html )。 但一个窗口内只有一个Buffer是处于可见状态的,所以Buffer的用法最不直观。 学习Vim就要克服那些不直观的操作!因为Vim本身就是基于CLI的,而我们相信CLI就是效率。本文便来总结一下Buffer相关的命令与操作。 打开与关闭 不带任何参数打开多个文件便可以把它们都放入缓冲区(Buffer): vim a.txt b.txt...

vimbash

0

点赞

0

回复

655

浏览

Vim 多文件编辑:窗口

标签页(tab)、窗口(window)、缓冲区(buffer)是Vim多文件编辑的三种方式,它们可以单独使用,也可以同时使用。 它们的关系是这样的: A buffer is the in memory text of a file. A window is a viewport on a buffer. A tab page is a collection of windows. vimdoc http://vimdoc.sourceforge.net/htmldoc/windows.html 本文主要介绍Vim窗口的创建与维护,另外两种编辑方式的使用可以参考: Vim 多文件编辑:缓冲区 http://tianmaying.com/tutorial/vim buffer 和 Vim 多文件编辑:标签页 http://tianmaying.com/tutorial/vim tabpage 。先上图: 打开关闭 使用 O 参数可以让Vim以分屏的方式打开多个文件: vim O main.cpp my oj toolkit.h...

vimbash

0

点赞

0

回复

884

浏览

Vim多文本编辑:标签页

多文件编辑的场景太常见了:代码比对、项目重构、模块构建... 最初harttle在碰到这些问题时直接转向IDE了,其实Vim不仅支持多文件编辑,而且支持多种风格:标签页(tab)、窗口(window)、缓冲区(buffer)等。 今天harttle就来介绍一下Vim强大的多文件编辑!本文介绍Vim标签页的使用,另外两篇文章在这里: Vim 多文件编辑:缓冲区 http://harttle.com/2015/11/17/vim buffer.html Vim 多文件编辑:窗口 http://harttle.com/2015/11/14/vim window.html 要做一个强大的IDE,除了多文件编辑技巧,你可能还需要 终端复用 http://harttle.com/2015/11/06/tmux startup.html 和 目录树 http://harttle.com/2015/11/04/vim ide.html 。 打开与关闭 标签页 http://vim.wikia.com/wiki/Using_tab_pages 是最常见的多文件编辑方式吧,熟悉IDE的小伙伴一定能很快上手! 使用 p 参数来用多个标签页启动Vim: vim p main.cpp my oj toolkit.h /private/etc/hosts...

vimbash

0

点赞

0

回复

849

浏览

打造前端开发的Vim环境

前不久harttle着手搭建了 类似IDE的Vim环境 http://tianmaying.com/tutorial/vim ide ,然而对于前端开发者这还远远不够。 本文便记录一下如何实现前端开发者关心的那些特性:不同文件类型的缩进、HTML标签匹配注释移除、HTML/CSS/Javascript自动补全、代码风格检查等等。让我们来打造一个适合前端开发的 Vim http://tianmaying.com/tutorials/tag/vim ! 文件类型设置 前端文件有不同的类型,而每个人对于缩进又有不同都要求。Vim中我们可以为每种文件设置不同的缩进和Tab行为。 查看当前文件类型 使用 :set filetype 命令可以查看当前文件的类型。例如: filetype=html.handlebars...

bashjavascripthtmlcssvim

0

点赞

0

回复

756

浏览

那些鲜为人知的Vim技巧

用拷贝的内容替换 当发生拼写错误或者想要重命名标识符时,就需要用拷贝的内容来替换当前的名字。比如调用函数时写错了: voidletus_fuckit_with_vim(){...

vimbash

0

点赞

0

回复

858

浏览

在VIM下写C++能有多爽?

我是坚定的Vim党,因为和命令行的集成如此之好,Vim可以解决任何问题。然而在这个世界上,即便是最好用的工具也是需要配置的。 由于最近在写C++,经过一番配置后,小编写C++已经感到非常爽了,于是决定用一篇文章来记录如何打造一个适合写C++的Vim编辑器! 包括C++的自动补全、括号引号匹配、格式化、注释、编译运行快捷键等。 小编之前在 Vim初级:配置和使用 http://tianmaying.com/tutorial/vim 中介绍了Vim的基本配置与使用, 感受Vim的强大:进阶技巧 http://tianmaying.com/tutorial/vim advanced 中介绍了更加方便的高级使用技巧。 基础设置 稍微熟悉Vim的小伙伴都会知道这个文件 ~/.vimrc ,如同绝大多数的Unix软件,Vim也是用基于文本的配置文件。 当前用户的Vim配置便存储在这个文件当中,该文件的每一行便是一个配置项( function 除外)。 配置文件中的所有语句都会在打开Vim时,在Ex模式下执行。例如,我们在Vim中打开行号: :setnumber...

vimc++vundle

0

点赞

0

回复

670

浏览

感受Vim的强大:进阶技巧

Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。 如果你还没有使用过Vim,建议你先去看这个: Vim初级:配置和使用 http://tianmaying.com/tutorial/vim 。本文介绍一些Vim的高级特性。包括块编辑、宏录制、语法高亮、键盘映射、函数定义、文件类型识别与对应插件加载等。 英文文档: http://vimdoc.sourceforge.net/htmldoc/,中文文档:http://vimcdoc.sourceforge.net/doc/ http://vimdoc.sourceforge.net/htmldoc/%EF%BC%8C%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%9Ahttp://vimcdoc.sourceforge.net/doc/ 块编辑 可视 模式: v 可进入visual模式,使用标准快捷键移动光标可选择文本块,之后可输入标准编辑命令。 列编辑 模式: v 进入列编辑模式,移动光标将按列进行选中。例如: 删除块注释: v 进入列编辑模式, ikjl 选中注释列, x 删除N个字符; 添加块注释: v 进入列编辑模式, ikjl 选中要注释的行, I 进入插入模式,输入几个注释字符, 推出列编辑。 vim所有的模式(即工作状态)如下: 1. (o) 普通模式: 输入命令时。 2. (x) 可视模式: 可视区域高亮并输入命令时。 3. (s) 选择模式: 类似于可视模式,但键入的字符对选择区进行替换。 4. (o) 操作符等待模式: 操作符等待中 ("d","y","c" 等等之后)。 5. (i) 插入模式: 也用于替换模式。 6. (c) 命令行模式: 输入 ":" 或 "/" 命令时。 行尾块 :因行尾参差不齐,块编辑一般用于行首、行间;行尾编辑要有一些技巧: gg 到文件头, 进入块编辑模式, G 选择所有内容; $A 到行尾并进入插入模式,输入要插入的字符, 完成。 文件类型识别与对应插件加载 Vim可针对特定的文件,加载指定插件。以此来实现文件类型的特殊配置以及语法高亮。 参见: http://vimcdoc.sourceforge.net/doc/filetype.html filetype plugins http://vimcdoc.sourceforge.net/doc/filetype.html filetype plugins filetype on 将开启文件识别,Vim 会在载入时做如下工作: 1. 执行 $RUNTIMEPATH/filetype.vim ,根据文件名判断类型 2. 如果需要的话,执行 $RUNTIMEPATH/scripts.vim ,进一步判断文件类型 3. 设置 Vim 的 filetype 变量 我们也可以通过诸如 :set filetype=c 的命令来手动设置文件类型 如果不使用文件识别,我们可以运行 au BufNewFile,BufRead .plt source ~/.vim/after/ftplugin/plt.vim 来使用 plt.vim 初始化 .plt 文件。 更多关于 RUNTIMEPATH : http://vimcdoc.sourceforge.net/doc/options.html 'runtimepath http://vimcdoc.sourceforge.net/doc/options.html 'runtimepath ' filetype plugin on 允许Vim加载文件类型的插件,Vim会在载入时寻找并加载 $RUNTIMEPATH/ftplugin.vim ,该脚本会寻找并加载 $RUNTIMEPATH/ftplugin/ .vim 。 例如: ~/.vim/ftplugin/cpp.vim 将在 cpp 文件类型被识别后自动载入。 同样, ~/.vim/after/ftplugin/cpp.vim 会在最后被调用,进而覆盖之前的配置。 另外, filetype indent on 允许Vim加载该文件类型的缩进设置。即执行 RUNTIMEPATH/indent.vim 。 语法高亮 syntax on 允许 Vim 加载文件类型的语法高亮配置,Vim会在载入时寻找并加载 RUNTIMEPATH/syntax/ .vim 。 例如: ~/.vim/syntax/markdown.vim 将会对文件类型 markdown 进行语法高亮。 键盘映射 Vim支持定义键盘映射来完成快捷键的功能,也就是将特定的按键映射为一系列按键与函数的序列。 例如将 F7 映射为编译当前java文件: map :!javac % ...

vimbash

0

点赞

0

回复

638

浏览

Vim中如何快速进行光标移动?

Vim最大的特征与最大的困难就是纯键盘操作,所以快速移动光标是Vim的最基本技能。我接触Vim也有四个年头了, 曾经由于项目重构操作频繁而切换到了WebStorm,最近又由 WebStorm 切换到了 Vim http://harttle.com/2015/11/04/vim ide.html 。 始终感觉光标移动是最大的痛处,同时又能从键盘操作获得极大的快乐。 下文便开始介绍那些常用的快捷键,先上图! 最近感受光标移动技能又一次升级了!来回顾一下我的Vim光标升级过程吧: 1. 只会上下左右和插入( h , j , k , l , i )。所有操作都由这5个键来完成。这时候用Vim的键盘声因简直像打Dota一样。我大概持续了一个月。 2. 学会了单词移动和文件头尾( w , b , $ , ^ , gg , G )。这时编辑起来不那么费力了,看起来还可以。这一阶段持续了两年...这两年里我学会了正则查找和替换( /xx , %s/xx/xx/g )。 3. 能够熟练地滚屏( zz , zt , zb , c f , c b )、标识符间来回移动、按屏幕移动光标( H , L , M )、窗格间移动( c w hjkl )。这是最近一年的水平,同时还学会了宏录制、列编辑等。 4. 下一阶段:熟悉段落与单词间跳转,熟悉数字的使用。比如对于 func(args, count) ,我要记住从行首到第二个参数的快捷键是 4w 。 如果你还没有接触过Vim,可以从 这里 http://harttle.com/2013/11/08/vim config.html 开始。 字符移动 在Vim的Normal模式里(如果你在Visual模式或者Insert模式,可以按 回到Normal模式), 通过 h , j , k , l , i 来进行左下上右的光标移动。 在Vim中多数操作都支持数字前缀,比如 10j 可以向下移动10行。 单词移动 多数情况下单词移动比字符移动更加高效。 w 移动光标到下一个单词的词首, b 移动光标到上一个单词的词首; e 移动光标到下一个单词的结尾, ge 移动光标到上一个单词的结尾。 单词移动同样支持数字前缀,比如 4w 可以向后移动4个单词。连续的标点符号算一个单词。 有趣的是, W , B , E 具有同样的功能,只不过它是用空格来分隔单词的,可以跳地更远~ ^ 到行首, $ 到行尾。 拷贝一行: ^y$ 。 相对屏幕移动 通过 c f 向下翻页, c b 向上翻页。这在几乎所有Unix软件中都是好使的,比如 man 和 less 。 H 可以移动到屏幕的首行, L 到屏幕尾行, M 到屏幕中间。 zt 可以置顶当前行,通常用来查看完整的下文,比如函数、类的定义。 zz 将当前行移到屏幕中部, zb 移到底部。 文件中移动 通过 :10 可以直接移动光标到文件第10行。如果你看不到行号,可以 :set number 。 gg 移到文件首行, G 移到尾行。 拷贝整个文件: ggyG 。 /xx 可以查找某个单词 xx , n 查找下一个, N 查找上一个。 在光标跳转之后,可以通过 c o 返回上一个光标位置, c i 跳到下一个光标位置。 ?xx 可以反向查找, q/ , q? 可以列出查找历史。 同时发表在: http://harttle.com/2015/11/07/vim cursor.html http://harttle.com/2015/11/07/vim cursor.html ...

bashvim

0

点赞

0

回复

1427

浏览

优雅地使用命令行:Tmux 终端复用

你是否曾经开过一大堆的Terminal?有没有把它们都保存下来的冲动?Tmux 的Session就是做这件事情的!你可以随时退出或者进入任何一个Session。每个Session有若干个Window,每个Window又可以分成多个窗格(Pane)。 即使iTerm/Terminal/Konsole意外关闭也没关系。Session可以完全恢复!但是关机就不可以了,不过你可以写脚本来恢复! Tmux是一个终端复用软件,BSD协议发布。一般用于在一个命令行窗口中访问多个命令行会话,或者在一个命令行终端中同时使用多个程序。Tmux用起来是怎样的呢?看图: Tmux 最经典的使用场景便是用 Tmux+Vim 来做一个IDE,其中Vim部分的配置过程记录在了 这里 http://harttle.com/2015/11/04/vim ide.html ,本文介绍Tmux的配置和使用。 ITERM的窗格和TMUX有什么区别? iTerm是一个GUI软件,它的窗格只是窗格而已!而Tmux是终端复用,在一个命令行窗口中不仅可以显示多个Shell的内容,而且可以保持多个会话。 最重要的是:Tmux和Vim一样,属于字符终端软件,不需要任何GUI的支持,在远程登录时尤其有用。 TMUX和SCREEN有什么区别? 这两个都是做终端复用的,我在阿里云ECS上 搭建Node.js API服务器 http://harttle.com/2015/02/24/node web api.html 时用过 screen ,它是GNU软件,而Tmux是BSD的协议。 它们最主要的区别是Tmux支持Vi/Emacs风格的键盘映射,更好的接口和文档,以及更好的脚本控制。所以建议使用Tmux! 安装TMUX OSX brew install tmux...

linuxvimtmux

0

点赞

1

回复

2513

浏览

用 Vim 来打造自己心仪的 IDE

一年前我从Vim切换到了WebStorm,是因为WebStorm强大的重构功能,以及Super Search功能。涉及多文件编辑和重构时WebStorm的优势便非常明显。 最近到手了HHKB,从键盘到触摸板的切换还是挺麻烦的,于是Vim编辑的需求又来了。。加之WebStorm经常假死,我决定重新启用Vim。同时重新打造了我的Vim,使它能够满足我在IDE中的所有需求。这篇文章便来记述整个过程,或许有些帮助。先上图: 上图中,下面的Console是通过Tmux搞的。Tmux的配置和使用参见: 优雅地使用命令行:Tmux终端复用 http://harttle.com/2015/11/06/tmux startup.html 。 准备工作 安装Git、Homebrew(如果你是Mac),并安装新版本的Vim( =7.3)。一般linux发行版都会预装Vim,你需要检查一下vim的版本: $ vim version...

idelinuxvim

0

点赞

0

回复

881

浏览

Vim 入门

Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。 文档参见: http://vimdoc.sourceforge.net/htmldoc/ http://vimdoc.sourceforge.net/htmldoc/ 中文文档: http://vimcdoc.sourceforge.net/doc/ http://vimcdoc.sourceforge.net/doc/ 基础使用 查看帮助: :help , 进入标签, O 返回。 配置文件 初始化过程 正如多数 linux 软件,vim 的配置文件分为系统配置文件 /etc/vimrc , /usr/share/vim/ 和用户配置文件 ~/.vimrc , ~/.vim/ 。 vim 的配置文件载入过程为: 1. /etc/vimrc 2. $HOME/.vim/ , $HOME/.vimrc 3. $VIMRUNTIME/.vim , $VIMRUNTIME/.vimrc 4. $HOME/.vim/after/ 通过运行 vim V 可查看整个初始化过程。 示例配置 一个示例配置文件如下: " .vimrc...

vim

新建主题 记录代码

学员动态

  • y**4在课程中提出了问题:使用post的时候,...
  • E**6向课程作业中提交了代码
  • 天码君回复了p**g在课程中的问题:欢迎来到天码营学习,...
  • p**g向课程作业中提交了代码
  • 2**0向课程作业中提交了代码
  • C**f评论了y**4在课程中的作业:这是我们作业系统的问...
  • p**g在课程作业中回复了老师:老师还是报这个错...
  • C**f评论了p**g在课程中的作业:这里不用管,按作业要...
  • 天码君回复了p**g在课程中的问题:欢迎来到天码营学习,...
  • p**g完成了课程的作业
  • y**4在课程中提出了问题:导入了参考代码,但是...
  • E**6向课程作业中提交了代码
  • C**f评论了p**g在课程中的作业:OneToMany标...
  • p**g在课程作业中回复了老师
  • p**g在课程作业中回复了老师:老师我不知道那里错了...
  • 天码君回复了吴祖彦在课程中的问题:欢迎来到天码营学习,...
  • y**4添加了笔记:关于第13课任务 p...
  • 1**3向课程作业中提交了代码
  • y**4在课程中提出了问题:创建博客成功 未通过...
  • y**4向课程作业中提交了代码
  • p**g完成了课程的作业
  • 天码君回复了p**a在课程中的问题:欢迎来到天码营学习,...
  • M**y向课程作业中提交了代码
  • C**f回复了E**6在课程中的问题:class1.new...
  • p**g在课程作业中回复了老师:老师能帮我开下下一解...
  • X**i向课程作业中提交了代码
  • p**g在课程作业中回复了老师:老师我这里老是过不...
  • y**4向课程作业中提交了代码
  • p**g完成了课程的作业
  • 天码君回复了y**4在课程中的问题:欢迎来到天码营学习,...
  • 天码君回复了X**Y在课程中的问题:欢迎来到天码营学习,...
  • E**6向课程作业中提交了代码
  • 天码君回复了y**4在课程中的问题:欢迎来到天码营学习,...
  • f**y向课程作业中提交了代码
  • 七向课程作业中提交了代码
  • F**7在课程作业中回复了老师:老师你好,我想问下这...
  • l**2向课程作业中提交了代码
  • C**f回复了E**6在课程中的问题:这里只是声明了一个属...
  • E**6向课程作业中提交了代码
  • l**2向课程作业中提交了代码
  • 天码君回复了v**e在课程中的问题:欢迎来到天码营学习,...
  • X**i完成了课程的作业
  • p**g完成了课程的作业
  • 天码君回复了E**6在课程中的问题:欢迎来到天码营学习,...
  • 2**0向课程作业中提交了代码
  • y**4在课程作业中回复了老师:这里需要做反射出来对...
  • p**g在课程作业中回复了老师
  • p**g在课程作业中回复了老师:老师这里怎么老是映射...
  • y**4添加了笔记:创建博客成功 未通过...
  • 吴祖彦向课程作业中提交了代码
  • y**4在课程中提出了问题:请仔细考虑Sessi...
  • E**6向课程作业中提交了代码
  • C**f评论了X**i在课程中的作业:题目要求返回渲染的页...
  • 扶**学向课程作业中提交了代码
  • p**g完成了课程的作业
  • E**6在课程中提出了问题:private En...
  • 天码君回复了X**i在课程中的问题:欢迎来到天码营学习,...
  • l**2向课程作业中提交了代码
  • p**g在课程作业中回复了老师
  • C**f回复了y**4在课程中的问题:是的 请仔细考虑Se...
  • C**f评论了p**g在课程中的作业:这里主要目的是给us...
  • y**4在课程作业中回复了老师:关于第13课任务 p...
  • p**g在课程作业中回复了老师:老师这里我不知道要怎...
  • C**f评论了p**g在课程中的作业:blogMetaIn...
  • E**6向课程作业中提交了代码
  • 吴祖彦向课程作业中提交了代码
  • 七向课程作业中提交了代码
  • p**g在课程作业中回复了老师:老师这里我不知道要怎...
  • p**g在课程作业中回复了老师:谢谢,老...
  • M**y向课程作业中提交了代码
  • 我**爱向课程作业中提交了代码
  • y**4向课程作业中提交了代码
  • 天码君评论了p**g在课程中的作业:帮你解锁...
  • p**g在课程作业中回复了老师
  • E**6在课程中提出了问题:User user ...
  • c**5完成了课程的作业
  • X**i完成了课程的作业
  • p**g在课程作业中回复了老师:老师这里我不知道要怎...
  • 天码君回复了y**4在课程中的问题:欢迎来到天码营学习,...
  • y**4在课程中提出了问题:使用post的时候,...
  • p**g完成了课程的作业
  • C**f评论了X**i在课程中的作业:1、要分页 2、要把...
  • p**g在课程作业中回复了老师:老师我这里创建了,可...
  • E**6向课程作业中提交了代码
  • C**f评论了p**g在课程中的作业:UserRepori...
  • l**o向课程作业中提交了代码
  • E**6向课程作业中提交了代码
  • p**g在课程作业中回复了老师:在Blog中添加对C...
  • M**y向课程作业中提交了代码
反馈意见