首先,其他的文本编辑器只有一种模式,就是插入模式.而vim一下子颠覆了我们的世界观——有好多模式.这个是思维上的切换,很难也很重要!!! 其次,Vim 提供一个区分模式的用户界面.也就是说在不同的模式下相同的键位可能产生的结果不一样.好多快捷怎么记忆?记忆后过段时间不使用又还给vim了.这个是因为没有弄清楚职责和使用场景,没有构建成套的vim知识体系.而我们这里通过模式为载体来构建vim知识体系. 目的 介绍vim的常用模式职责及模式切换,减少由于不断思考和纠正什么场景用什么模式的什么操作而引起…
cmd-line模式又有3个类型:Ex 命令(ex commands).查找模式(Search patterns).Filter 命令(Filter commands).本文主要重点的是Ex 命令和Search patterns.Filter 命令暂时用的场景比较少,如果有更适合的场景再补充. 目的 掌握cmd-line模式下常用操作的语法和概念 Ex 命令简介 初时,先有ed,ed为ex之父,ex为vi之父,而vi为vim之父.可见Ex 命令的重要性. 在Ex 命令影响范围广且距离远.对比no…
目的 掌握normal模式下常用操作的语法和概念,这些操作对应的应用场景以及实用技巧. 通过normal模式举一反三掌握cmd-line和visual的常用文本操作. 简介 文本操作的理想状态为:一个操作符+一个动作命令. normal.visual.cmd-line都具有操作文本的基本功能. normal 操作符+动作命令. visual  动作命令+操作符. cmd-line   匹配范围+操作符. 这三个在文本的基础操作时实现的功能是一样的.主要围绕着normal来讲,其他的举一反三即可.…
简介 这部分的插件是与编程相关的插件.主要涉及两大块:所有编程语言通用的插件,以及各个语言独有的插件.插件的数量和合理性,这可能是一个不断累积和修正的过程. 个人感觉,现在比较适合sh,html,markdown的编程.对于java,还是有点勉强.至于其他的,比如python等,现在还没有涉略.还会继续边使用,边调整. 其实只要是编程的IDE都会涉及到一些统一的概念:快速查找文件,快速查找文本引用,高亮,语法错误提示,自动提示,快速输入,消除重复操作,项目的管理等.我个人目前的感觉是,vim在项…
简介 关于插件的分类,此系列只会简单的区分为通用插件和编程插件.通用插件的意思是,不基于任何编程语言都可以使用的插件.编程插件,是针对于编程习惯,或者说是针对于某种语言的插件. 计划中,是先把基本常用的插件先整理出来.后期如果有遇到更适合的插件也会添加进来. 下面的插件,如果没有特别说明都是基于Vundle管理的.这些插件都可以在github上搜到,一般是最受欢迎的那个,所以就不一一说明了. 有些插件的快捷键设置会统一在最后的配置文件体现,就不一一描述. 开始界面 vim-startify vi…
定义 Vundle是vim bunler和简称,它是一个vim插件管理器. Vim本身缺乏对插件的有效管理,安装插件并配置.vimrc文件非常不便.gmarik受到Ruby的bunler的启发,开发了vundle这个vim插件,可以将插件分到不同的目录管理. Vundle基于Git架构,每一个插件都是一个项目的Repository,通过Vundle可以用简单的指令,管理插件的生命周期.这样,只要有一份.vimrc,到哪都可以使用原有的vim插件了.当然基本前提是:系统已经要有git. 安装 具体…
大部分的Vim 命令都在非插入模式中执行,不过有些功能在插入模式中会更好实现些. 如果没有输入当前文件不存在的新文本的需求时,建议通过其他模式来操作完成. 目的 掌握inser模式下常用操作的语法和概念 光标移动 移动光标的位置,这些操作和其他的编辑器基本一致.列几个常用的,其他的不一一列举. 常用语法: 操作 用途 Ctrl+Left 向后移动一个单词 Ctrl+Right 向前移动一个单词 Home 移动到行首 End 移动到行尾 Ctrl+Home 移动到文件第一行 Ctrl+End 移动…
vi是没有可视模式的.然而大多数编辑软件都都是有可视模式.所以我猜测vim是几乎迫于无奈才有了visual模式. 个人建议,能不用就不用.这样能直接在头脑里处理好文本,锻炼文本处理能力,同时能转变过来思维习惯. 目的 掌握visual的基本操作步骤 记住visual独有的用法 使用步骤 visual的操作可以分为三个步骤.可以对比normal的二个步骤:操作符+动作命令. 激活可视模式.一个是因为绝大时间都在normal模式下,需要切换.第二个是因为visual有三种情况. 移动文本末端.通过移…
菜鸟vimer成长记——第0章.我眼中的vim学习 菜鸟vimer成长记——第1章.统一概念 菜鸟vimer成长记——第2.0章.模式初探 菜鸟vimer成长记——第2.1章.normal模式 菜鸟vimer成长记——第2.2章.visual模式 菜鸟vimer成长记——第2.3章.insert模式 菜鸟vimer成长记——第2.4章.cmd-line模式 菜鸟vimer成长记——第3章.文件 菜鸟vimer成长记——第4.0章.Vim插件管理利器-Vundle 菜鸟vimer成长记——第4.1…
这是一系统总结vim的学习文章,记录我自己学习vim的过程和感悟.与此同时也想分享出来给大家,欢迎大家互相讨论和学习. 在这里假设你们对vim已经有了一些基本的认识或者说已经使用过几个月的vim.该系列文章里有些基础概念可能不会涉及到或者不会多做解释.一个是因为有些基础概念我目前也解释不清楚.越基础的解释起来越需要能力,目前鄙人还不具备.另一个是因为我相信各位大神们,你们已经有很好的搜索功能.当然有问题也欢迎大家互相讨论和学习. 这篇主要讲的是我当前对vim学习的理解.后面的一系列文章会针对于学…
不管学什么技术,我都深信概念是最重要的.是影响整个学习轨迹,决定能在这个技术领域高度. 当然如果你现在的目的不是在学习而在于解决问题(很多人不愿意承认,或者没发现),那概念就暂时没那么重要了. 目的 弄清楚这些概念,有助于记忆,举一反三.重复的东西只学一次!! 用键盘不用鼠标 第一关是理解vim的设计思路,vim设计之初就是整个文本编辑都用键盘而非鼠标来完成,键盘上几乎每个键都有固定的用法. 具体有两个要注意的建议: 学会盲打 如果你要低头看着键盘打字,或者键位不熟悉,或者指法不舒服,那学习Vi…
上一章一直在讲的是vim的文本的操作,本章主要讲的是vim的文件操作. 本章的有些概念和传统的文本编辑器也不尽相同.所以需要注意概念或者切切说是思维习惯的区别. vim 允许在一个编辑会话中编辑多个文件,我们既可以每次显示一个文件,也可以把工作区分成若干个分割窗口或标签页,每个窗口或标签页包含一个独立的缓冲区. 概念 在开始学习之前,有必要先弄清楚几个重要的概念:文件.缓冲区.窗口.标签页.以及,他们之间的关系是什么 文件 这里的文件,指的是存储在磁盘上的文件.在工作过程中,我们通常会说“我们正…
目录 定义 UML类图 参与者 编写代码 特点 定义 提供一个创建一系列相关或相互依赖的对象的接口,而无需指定具体的类. 使用频率: UML类图 参与者 AbstractFactory:声明一个创建抽象产品的的接口. ConcreteFactory:实现接口创建具体的产品对象. AbstractProduct:产品的抽象. Product:具体的产品,实现抽象产品的接口. Client:使用抽象工厂和抽象产品. 编写代码 1.新建控制台程序AbstractFactory,新增Abstract.c…
原文:[置顶] Android菜鸟的成长笔记(14)—— Android中的状态保存探究(上) 我们在用手机的时候可能会发现,即使应用被放到后台再返回到前台数据依然保留(比如说我们正在玩游戏,突然电话来了,当接完电话游戏继续玩),某些应用甚至会保留你离开时候的状态及数据,这些原理是什么?怎么去实现这样的应用?这将是我们这一篇文章要解开的问题. 有一句很常见的代码如下,很多人不知道为什么要加这么一句话 @Override protected void onCreate(Bundle savedIn…
原文:Android菜鸟的成长笔记(6)--剖析源码学自定义主题Theme 还记得在Android菜鸟的成长笔记(3)中我们曾经遇到了一个问题吗?"这个界面和真真的QQ界面还有点不同的就是上面的标题myFirstApp,怎么去掉这个标题呢?",当时我直接在AndroidMainfest.xml中添加了一个属性: android:theme="@android:style/Theme.NoTitleBar" 可能有的朋友就会迷惑了,为什么添加了这个属性就可以了.这一篇…
上一篇文章我们介绍了信息收集方法和WMIC,今天我们将跟随作者深入学习Windows提权基本原理的内容,希望通过这两篇文章的讲解,大家能够真正掌握这个技能. 推荐阅读:「白帽黑客成长记」Windows提权基本原理(上) 注:文章篇幅较长,阅读用时约10分钟. 在t5-t6阶段,快速攻陷 在继续渗透之前,你需要先回顾一下已经搜集到的信息,信息量应该已经不小了.我们计划的下一步就是要寻找一些能被轻易利用的系统缺陷来提升权限. 显而易见,第一步就是去查看补丁修正情况.如果发现主机已经被打了某些补丁,也…
「白帽黑客成长记」Windows提权基本原理(下) https://www.cnblogs.com/ichunqiu/p/10968674.html 提权.. 之前还在想 为什么 我的 sqlserver 运行在 network service 上面 还能被创建新用户. 上一篇文章我们介绍了信息收集方法和WMIC,今天我们将跟随作者深入学习Windows提权基本原理的内容,希望通过这两篇文章的讲解,大家能够真正掌握这个技能. 推荐阅读:「白帽黑客成长记」Windows提权基本原理(上) 注:文章…
大数据全栈工程师一词,最早出现于Facebook工程师Calos Bueno的一篇文章 - Full Stack (需fanqiang).他把全栈工程师定义为对性能影响有着深入理解的技术通才.自那以后全栈这个词便流行起来,我看到过的就有大数据全栈工程师,大数据全栈设计师,大数据全栈运维,大数据全栈市场营销人员等等.我自己是名大数据程序员, 阿里巴巴年薪800k大数据全栈工程师成长记 需要的技能 全栈工程师的价值 随着时间的推移,全栈工程师的作用和价值在越来越多的产品或项目中得到了印证.那么,我们…
6.4  工资程序成长记:类与对象 “夜半三更哟,盼天明:寒冬腊月哟,盼春风.若要盼得哟,涨工资,岭上……”自从上次老板许诺给小陈涨工资以后,一转眼又过去几个月了,可是涨工资的事一点动静都没有.小陈只好天天哼着这首歌,自己安慰自己,天总会亮的,春天总会来的,而工资也总会涨的.这天,小陈正在哼这首歌,没想到老板又让他去办公室.小陈心中那个高兴啊,心想,盼星星盼月亮,总算盼到了这一天啊. 于是,小陈赶紧来到老板的办公室.可是,当他一进办公室,看到老板那阴云密布的脸就知道情况不妙.果然,老板一见小陈就…
5.4.3 工资程序成长记:函数 自从上次小陈“程序员”的工资程序得到老板的夸奖,口头许诺给他涨工资以后,老板再也没有找过他,涨工资的事自然也就没有下文了.这天,老板又突然召他去办公室.这下可把小陈高兴坏了,心想盼星星盼月亮终于盼来涨工资这一天了.于是赶紧到了老板的办公室.可他刚进门就发现情况有点不对,只见老板阴沉着脸坐在他那张硕大的老板椅上,满头大汗,手指还在不停地敲击着键盘输入着什么.一见到小陈进来,就好像见到仇人似的,劈头盖脸地来了一句: “小陈啊,你这个工资程序怎么搞的,怎么每次都要重新…
4.4  从语句到程序 了解了各种表达式和语句之后,就相当于掌握了写作文要用到的词语和句子,但是,仅有词语和句子是无法构成一篇有意义的文章的.要完成一篇文章,先需要确定这篇文章的结构,是先分述再总述,还是逐层递进论述.定好结构后再按照结构的要求将词语和句子安排到合适的位置,这样才能写出一篇有意义的词句通顺的文章.编写程序就像写文章一样,也同样需要先根据需要处理的事务确定程序的流程控制结构,然后再将那些零散的语句串联起来描述一个完整的处理事务的过程,从而将多条零散的语句组织成可以完成一定功能的完整…
原文:Android菜鸟的成长笔记(3)--给QQ登录界面说So Easy 上一篇:Android菜鸟的成长笔记(2)--第一个Android应用 我们前面已经做了第一个Android应用程序,虽然有点像QQ的登录界面,但是很多地方还是很难看,这一篇咱们来将这个界面做成一个标准的商业界面,并一起来了解Android中的代码运行的原理. 好吧,咱们开始吧,首先启动模拟器,为了让咱们的界面和QQ的登录界面一样我下载了一个QQ的apk文件,下面咱们将这个apk安装到我们的模拟器上,看看效果. 怎么将a…
原文:Android菜鸟的成长笔记(2)--第一个Android应用 上一篇:Android菜鸟的成长笔记(1)--Anddroid环境搭建从入门到精通 在上一篇Android菜鸟的成长笔记(1)中我们已经介绍了Android环境的搭建,下面我们就来开发一个属于我们自己的好玩的应用吧,是不是已经迫不及待了,下面我们先来看看运行效果. 首先我们要创建一个手机模拟器 点击eclipse上面的模拟器图标,弹出如下弹框. 点击右边的New...按钮,我们来创建一个"手机",这个手机几乎和我们用…
原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写一个搭建过程的文章. 一.JDK安装 http://www.oracle.com/index.html  下载地址 选择JavaSE JDK进行下载 下载下来后进行安装(默认步骤安装) 设置环境变量步骤如下: 我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量: JAV…
原文:[置顶] Android菜鸟的成长笔记(13)——异步任务(Async Task) Android的UI线程主要负责处理用户的事件及图形显示,因此主线程UI不能阻塞,否则会弹出一个ANR(Application Not Responding)异常,所以不能在UI线程中执行耗时操作.AsyncTask<>是一个抽象类,通常被继承,继承时需要指定三个泛型: AsyncTask<Params, Progress, Result> Params:启动任务执行的输入参数的类型 Prog…
原文:[置顶] Android菜鸟的成长笔记(12)——Handler.Loop.MessageQueue 当一个程序第一次启动时,Android会启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如按键事件.触屏事件.绘图事件,主线程也被称为UI线程. UI的操作只能是通过主线程来操作,为了解决多线程操作UI的问题,就用到了Handler类. 一.Handler类 Handler类的作用有两个: 1.在新启动的线程中发送消息. 2.在主线程中获取.处理消息. 例如:…
原文:[置顶] Android菜鸟的成长笔记(11)——Android中的事件处理 Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子: 基于回调的事件处理 @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return super.onTouchEvent(event); } 基于监听的事件处理 butto…
原文:[置顶] Android菜鸟的成长笔记(10)——使用Bundle在Activity之间传值 前面我们了解了如何启动一个Activity,一个Activity在启动另外一个Activity的时候可能会遇到需要传值的需要.Activity之间传值是通过Bundle来实现的. 一.通过Bundle传值介绍 Intent提供了多个重载方法来携带数据 putExtras(Bundle data):向Intent中放入需要的数据包 Bundle getExtras():取出Intent所携带的数据…
原文:[置顶] Android菜鸟的成长笔记(9)——Intent与Intent Filter(下) 接着上一篇的内容,下面我们再来看看Intent的Data与Type属性. 一.Data属性与Type属性 Data属性通常用于向Action属性提供操作的数据,Data属性接受一个Uri对象 格式:scheme://host:port/path 例如: content://com.android.contacts/contacts/1 tel:123 其中prot部分被省略了,contacts/…
原文:[置顶] Android菜鸟的成长笔记(8)——Intent与Intent Filter(上) Intent代表了Android应用的启动“意图”,Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,取决于Intent的各个属性. 一.显式的Intent 明确指定了要启动的组件的Intent我们称为显式的Intent 例如: package com.example.testintent; import android.app.Activity; import and…