精华内容
下载资源
问答
  • ``` v_u = ['dd','dds','qqq'] v_n = ['111','222','333'] ... print(item_text[2]) # 输出所选的第一列的值 ... win32clipboard....但SetClipboardData,我在粘贴,就只有第一个字母。 这是为什么?
  • 在vim 模式对文件中的内容进行复制,除了常规的复制粘贴外,其实还可以进行命令...3.shift+: 模式,要复制的第一行号 ,复制的最后一行号 co 要存放复制内容的行号(一般这行会空,在下一行复制)。 :4,6 co 12 ...

    在vim 模式对文件中的内容进行复制,除了常规的复制粘贴外,其实还可以进行命令操作,简单快捷 如:

    1.vim name.txt # 进入name文件

    2 假如内容只有11行,在insert 模式下,可以往下添加行号,然后按Esc键退出

    3.shift+: 模式后,要复制的第一行号 ,复制的最后一行号 co 要存放复制内容的行号(一般这行会空,在下一行复制)。

     :4,6 co 12   #表示复制第4-6行到13行

     

     

    展开全文
  •  实例098 删除数组元素改变其长度 116 4.2 常用数组排序算法 117  实例099 使用选择排序法对维数组进行排序 117  实例100 使用冒泡排序法对维数组进行排序 118  实例101 使用快速排序法对维数组进行...
  • vim常用命令

    2019-05-26 19:59:42
    文章目录vim命令模式可视模式删除命令撤销命令重复命令文本移动复制粘贴查找命令替换操作替换命令输入模式末模式补充 vim 命令模式 h:左移 j:下移 k:上移 l(L):右移 M:光标移动到中间 L:光标移动到屏幕...

    vim

    命令模式

    1. h:左移
    2. j:下移
    3. k:上移
    4. l(L):右移
    5. M:光标移动到中间行
    6. L:光标移动到屏幕最后一行行首
    7. G:移动到指定行,行号 -G,只有G的话,到文件最末尾
    8. gg:文件第一个字符
    9. w:向后一次移动一个字
    10. b:向前一次移动一个字
    11. {:按段移动,上移
    12. }:按段下移,下移
    13. ctrl+d:向下翻半屏
    14. ctrl+u:向上翻半屏
    15. ctrl+f:向下翻一屏
    16. ctrl+b:向上翻一屏

    可视模式

    1. v:按字符移动,结合h,j,k,l选中文本内容。
    2. V:按行移动,选中文本可视模式,可以配合d,y,>>,<<实现对文本块的删除,复制,左右移动。

    删除命令

    1. x:删除光标后一个字符,n x 删除光标后的n个字符
    2. X:删除光标前一个字符,相当于Backspace
    3. dd:删除光标所在行,n dd删除指定的n行
    4. D:删除光标后本行所有内容,包含光标所在字符
    5. d0:删除光标前本行所有内容,不包含光标所在字符
    6. dw:删除光标开始位置的字,包含光标所在字符

    撤销命令

    1. u:一步一步撤销
    2. ctrl+r:反撤销

    重复命令

    1. . :重复上一次操作的命令

    文本移动

    1. >>:文本行右移
    2. <<:文本行左移

    复制粘贴

    1. yy:复制当前行,n yy复制n行
    2. 在末行模式,输入:a,by 复制从第a行开始,到第b行结束的内容
    3. p:在光标坐在位置向下新开辟一行,粘贴

    查找命令

    1. /str : 查找str,从光标所在行往下查找
    2. ?str:查找str,从光标所在行往上查找
    3. n:查找下一个
    4. N:查找上一个

    替换操作

    1. r:替换当前字符
    2. R替换当前行光标后的字符

    替换命令

    1. 末行模式下,将光标所在行的abc替换成123,:s/abc/123/g
    2. 末行模式下,将第一行到第10行之间的abc替换成123,:1,10s/abc/123/g
    3. 末行模式下,把文件中的abc全部替换成123,:%s/abc/123

    输入模式

    1. i:插入光标前一个字符
    2. I:插入行首
    3. a:插入光标后一个字符
    4. A: 插入行末
    5. o:向下新开一行,插入行首
    6. O:向上新开一行,插入行首

    末行模式

    1. :set nu 显示行号
    2. ! shell命令
    3. wq:保存退出
    4. ZZ: 保存退出
    5. q!:不保存退出

    补充

    修改用户目录下的vimrc(~/.vimrc)文件,修改vim配置

    1. set nu :设置每次vim 打开文件显示行号。
    2. set ts=4:设置tab键每次4个空格
    展开全文
  • 原因:我的多个节点是基于第一个节点复制粘贴的,需要删除根目录下的data文件夹,删除之后就了 第二个:运行多个Elasticsearch开始报错,master not discovered yet。百度发现好像是7.1版本之后需要指定主节点。...

    今天试了试本机搭建Elasticsearch 集群,遇到了两个问题
    第一个:集群启动后打开Elasticsearch-head,发现里面只有单个节点。
    原因:我的多个节点是基于第一个节点复制粘贴的,需要删除根目录下的data文件夹,删除之后就行了

    第二个:运行多个Elasticsearch后开始报错,master not discovered yet。百度后发现好像是7.1版本之后需要指定主节点。在每个节点根目下的config/elasticsearch.yml 里面添加
    cluster.initial_master_nodes: [“node-1”]
    [] 中间的是节点名
    然后就能够顺利运行了
    在这里插入图片描述

    展开全文
  • 上一篇文章介绍了clipboard.js这个工具库中的第一个依赖select这个工具库主要完成了对任意DOM元素的复制粘贴板的功能。这次介绍一下clipboard.js源码中的第二个依赖的轻型工具库tiny-emitter这个工具库主要用来...
        

    上一篇文章介绍了clipboard.js这个工具库中的第一个依赖select这个工具库主要完成了对任意DOM元素的复制到粘贴板的功能。这次介绍一下clipboard.js源码中的第二个依赖的轻型工具库tiny-emitter这个工具库主要用来实现一个简易的基于监听发布者模式的事件派发和接收器,代码经过我的es6改写后只有40行,没有依赖第三方库,实现的功能却是比较强大的,而且可以根据实际情况方便的进行扩展。

    快速上手

    在研究源码之前,先看一下最普遍的使用场景。

    const Emitter = require('./emitter')
    
    let emitter = new Emitter()
    
    // on 一个事件
    
    let sayHello = name => console.log(`hello, ${name}`)
    emitter.on('helloName', sayHello)
    // emit 一个事件
    
    // emitter.emit('helloName', 'dongzhe')
    
    // on一个带有作用域的同一个事件
    let obj = {
        prefix: 'smith',
        thankName (name) {
            console.log(`hello, ${this.prefix}.${name}`)
            return `hello, ${this.prefix}.${name}`
        }
    }
    
    emitter.on('helloName', obj.thankName, obj)
    emitter.emit('helloName', 'dongzhe')
    
    // new other emitter 可以在这里分组 不同的组可以有同样的eventName
    let emitter1 = new Emitter()
    
    let sayHaHa = name => console.log(`haha, ${name}`)
    emitter1.on('helloName', sayHaHa)
    // emit 一个事件
    
    emitter1.emit('helloName', 'dongzhe')

    可以看出,每一个事件管理器都是一个对象,可以根据不同的业务场景模块创建不同的事件管理器,事件管理器最基本功能就是动态的订阅事件和派发事件,当然还可以取消事件。用于在同一主模块下的不同子模块以及不同主模块之间的通信,支持动态绑定作用域。如果用过vue的父子组件事件通信以及eventBus,对事件管理器应该不会陌生的。

    源码实现

    事件管理模型主要由4个函数构成,

    • on 用于订阅事件,一个事件订阅多个触发函数
    • emit 用于发布事件,发布时会以此触发事件订阅的函数
    • once 订阅的事件只触发一次
    • off 取消订阅事件,支持指定取消,批量取消和全部取消

    代码结构

    class E {
        constructor () {
            this.eventObj = {}
        }
        on () {}
        once () {}
        emit () {}
        off () {}
    }
    
    module.exports = E
    

    Emitter对象存在一个事件对象,以键值对的形式保存事件名称和对应的触发事件。

    订阅事件 on

    订阅事件就是把要触发的函数放到事件对应的对象里面,如果事件不存在,需要初始化一下即可。一个事件可以动态的订阅多个触发函数。而且支持指定作用域,可以远程调用任意模块的函数。

    on (eventName, callback, ctx) {
        // 一个eventName可以绑定多个事件
        (this.eventObj[eventName] || (this.eventObj[eventName] = [])).push({callback, ctx})
        return this
    }

    发布事件 emit

    相对订阅事件的就是发布事件,发布事件接收事件的事件名和触发函数的参数,将对应事件订阅的触发函数依次执行即可,参数可以使用es6rest操作符。

    emit (eventName, ...args) {
        let eventArr = (this.eventObj[eventName] || []).slice()
        eventArr.forEach(ele => ele.callback.call(ele.ctx, args))
        return this
    }

    取消事件 off

    相对订阅事件,也应该可以取消事件,取消事件可以有多种选择,可以指定取消事件订阅的某一个或者多个触发函数,也可以直接将整个事件都取消掉。取消事件接收取消的事件名称,和一个可选的函数对象或者函数对象数组(我自己增加的),如果传入了指定的触发函数对象,通过遍历所有触发的函数来过滤掉需要取消的触发函数,最后重新赋值即可。如果没有传触发函数,那么就认为取消整个订阅的事件,直接从全局的事件对象中删除订阅对象即可

    off (eventName, callback) {
        if (Object.prototype.toString.call(callback) === "[object Array]") {
            callback.forEach(func => this.off(eventName, func))
            return this
        } 
        let liveEvents = []
        let obj = this.eventObj
        let eventArr = obj[eventName]
        // 如果没有callback 就删除掉整个eventName对象
        if (eventArr && callback) {
            liveEvents = eventArr.filter(ele => (ele.callback !== callback && ele.callback._ !== callback))
        }
        (liveEvents.length) ? obj[eventName] = liveEvents : delete obj[eventName]
        return this
    }

    其中最主要的就是下面这一行代码了,使用filter过滤掉需要取消的触发函数,ele.callback._ !== callback是为了兼容once后面马上就说到。

    liveEvents = eventArr.filter(ele => (ele.callback !== callback && ele.callback._ !== callback))

    一次触发 once

    有的时候我们只需要触发一次订阅的事件,比如用户刚登录进来获取历史消息或者通知消息,触发一次后就不需要了,所以有了once函数,once函数主要的工作原理就是,在函数内部添加一个代理函数listener代理函数用来为触发函数做代理,做代理的目的是为了添加逻辑,这个逻辑就是在触发函数第一次执行的时候,就自动执行off函数,用来取消触发函数的逻辑。

    let listener = (...args) => {
        this.off(eventName, listener)
        callback.apply(ctx, args)
    }
    // 因为listener是在callback上封装了一层 所以要规定一个可以找到callbak的规则
    listener._ = callback

    因为listener是在callback上封装了一层代理 所以要规定一个可以找到callback的规则,这样off函数在传入取消函数的时候,我们可以顺利的用兼容的方式找到。
    最后其实订阅的是这个代理函数listener

    once (eventName, callback, ctx) {
        let listener = (...args) => {
            this.off(eventName, listener)
            callback.apply(ctx, args)
        }
        // 因为listener是在callback上封装了一层 所以要规定一个可以找到callbak的规则
        listener._ = callback
        return this.on(eventName, listener, ctx)
    }

    完整代码

    我自己在原来的代码基础上用es6重新编写,并添加了一些逻辑,可以对比原来的代码来看,最后完整的代码如下

    class E {
        constructor () {
            this.eventObj = {}
        }
        on (eventName, callback, ctx) {
            // 一个eventName可以绑定多个事件
            (this.eventObj[eventName] || (this.eventObj[eventName] = [])).push({callback, ctx})
            return this
        }
        once (eventName, callback, ctx) {
            let listener = (...args) => {
                this.off(eventName, listener)
                callback.apply(ctx, args)
            }
            // 因为listener是在callback上封装了一层 所以要规定一个可以找到callbak的规则
            listener._ = callback
            return this.on(eventName, listener, ctx)
        }
        emit (eventName, ...args) {
            let eventArr = (this.eventObj[eventName] || []).slice()
            eventArr.forEach(ele => ele.callback.call(ele.ctx, args))
            return this
        }
        off (eventName, callback) {
            if (Object.prototype.toString.call(callback) === "[object Array]") {
                callback.forEach(func => this.off(eventName, func))
                return this
            } 
            let liveEvents = []
            let obj = this.eventObj
            let eventArr = obj[eventName]
            // 如果没有callback 就删除掉整个eventName对象
            if (eventArr && callback) {
                liveEvents = eventArr.filter(ele => (ele.callback !== callback && ele.callback._ !== callback))
            }
            (liveEvents.length) ? obj[eventName] = liveEvents : delete obj[eventName]
            return this
        }
    }
    
    module.exports = E
    

    结语

    这只是一个比较简单的事件订阅发布器,但包含的核心思想还是比较完整的,用到了面向对象,订阅发布者模式,代理模式等,而且可以根据自己的需求进行很方便的扩展,比如我扩展的批量取消,也可以添加批量订阅,甚至使用promise来封装异步触发,每一个函数都返回了对象本身,可以完成链式调用,比如订阅完成后立刻触发完成初始化等等。

    展开全文
  • 实例228 设置ComboBox控件的默认选项为第一项 实例229 将数据表中的字段添加到ComboBox控件中 实例230 在ComboBox下拉列表中显示图片 实例231 用ComboBox控件制作浏览器网址输入框 实例232 实现带查询功能的...
  • 实例228 设置ComboBox控件的默认选项为第一项 实例229 将数据表中的字段添加到ComboBox控件中 实例230 在ComboBox下拉列表中显示图片 实例231 用ComboBox控件制作浏览器网址输入框 实例232 实现带查询功能的...
  • 实例228 设置ComboBox控件的默认选项为第一项 实例229 将数据表中的字段添加到ComboBox控件中 实例230 在ComboBox下拉列表中显示图片 实例231 用ComboBox控件制作浏览器网址输入框 实例232 实现带查询功能的...
  •  第一、如果你没有内存卡,即TF卡,必须下载PC套件连接手机。然后把jar和jad文 件通过数据线传输到手机本机内存文件夹"其他文件夹"也就是中。  第二、如果你有内存卡,可以尝试使用读卡器或手机USB设定选择"大...
  • 第一参数为ROW时先行列取值,为COLUMN时先列后行(不分大小写),第三参数开始为引用区域 消除空值消除空值函数。可以选择多行多列,按先行列之方式返回值.两个参数,一为区域一为序号 颜色求和按背景颜色对区域值...
  • 在新列的第2第一个数据)中,输入以下内容:= lcsortable(A2:A)这将等效于整个新列的数组公式。 强烈建议您执行此操作,按照以下顺序在新列上进行操作,以便将公式转换为计划文本,以减少与电子表格的...
  • 投资组合生成器 用Django制作的Web应用程序,用于生成投资组合。 可以在上看到使用hoxnox构建的样本投资组合。... 将密钥复制到剪贴板,然后粘贴到myproject文件夹中的settings.py文件的25。 安装依
  • 第一参数为ROW时先行列取值,为COLUMN时先列后行(不分大小写),第三参数开始为引用区域。 函数名称:消除空值 函数功能与参数:消除空值函数。可以选择多行多列,按先行列之方式返回值.两个参数,一为区域一为...
  • 第一参数为ROW时先行列取值,为COLUMN时先列后行(不分大小写),第三参数开始为引用区域。 函数名称:消除空值 函数功能与参数:消除空值函数。可以选择多行多列,按先行列之方式返回值.两个参数,一为区域一为...
  • 手动设置环境变量时,用win10...发生此类现象把可能产生乱码的项删除,然后重新手动添加即可,且必须保证第一次输入的不能是中文才。 另外如果在设置环境变量的时候,直接是从windows资源管理器上复制的路径粘贴
  • Excel百宝箱8.0

    2011-06-07 21:32:17
    第一参数为ROW时先行列取值,为COLUMN时先列后行(不分大小写),第三参数开始为引用区域。 函数名称:消除空值 函数功能与参数:消除空值函数。可以选择多行多列,按先行列之方式返回值.两个参数,一为区域一为...
  • EXCEL百宝箱8.0终极版

    2011-11-05 16:48:02
    第一参数为ROW时先行列取值,为COLUMN时先列后行(不分大小写),第三参数开始为引用区域。 函数名称:消除空值 函数功能与参数:消除空值函数。可以选择多行多列,按先行列之方式返回值.两个参数,一为区域一为...
  • 1,打开PPConn.asp,第一行,修改系统名称 2、解压,如需修改数据库路径,请在PPConn.asp里修改相应路径。 3,根据实际情况决定是否启用邮件功能:需要服务器支持Jmail组件,需要有一个支持POP3功能的邮箱 打开...
  •  第一步:点击“一键打开目录”,打开目录,复制右边黑色区所有文本,然后用记事本打开hosts文件然后粘贴保存即可!(如果出现无法保存或保存还是1KB请看软件帮助)  第二步:在第一步的基础,修改hosts里...
  • 至此我们就实现了图的编号的自动维护,当在第一张图前再插入一张图,Word会自动把第一张图的题注“图1-1”改为“图1-2”,文档中的“图1-1”也会自动变为“图1-2”。 表格编号的作法与图相同,唯一不同的是...
  • EXCEL集成工具箱V6.0

    2010-09-11 01:44:37
    最大的优点是将指定的任意区域按每个存储格内容为一行加入到当前批注中,允许批注内容中是否显示行号。 【连接字符串】 可视化地窗体连接字符串功能。能将最多三个任意区域存储格(或列)的内容按自定的分隔符号...
  • 最大的优点是将指定的任意区域按每个存储格内容为一行加入到当前批注中,允许批注内容中是否显示行号。 【连接字符串】 可视化地窗体连接字符串功能。能将最多三个任意区域存储格(或列)的内容按自定的分隔符号连接...
  • Excel百宝箱

    2012-10-27 17:09:21
    本工具相对于同类工具有不破坏背景色、条件格式、复制粘贴和撤消功能之优点 【环境设置】:设置工作表界面视图,控制各项目的显示与隐藏 【隐藏任意磁盘】:将磁盘隐藏,保所隐私文件 【按颜色汇总】:按背景色对选区...
  • Excel百宝箱9.0无限制破解版

    热门讨论 2012-02-03 19:05:29
    本工具相对于同类工具有不破坏背景色、条件格式、复制粘贴和撤消功能之优点 【环境设置】:设置工作表界面视图,控制各项目的显示与隐藏 【隐藏任意磁盘】:将磁盘隐藏,保所隐私文件 【按颜色汇总】:按背景色对选区...
  • 最大的优点是将指定的任意区域按每个存储格内容为一行加入到当前批注中,允许批注内容中是否显示行号。 【连接字符串】 可视化地窗体连接字符串功能。能将最多三个任意区域存储格(或列)的内容按自定的分隔符号...
  • 最大的优点是将指定的任意区域按每个存储格内容为一行加入到当前批注中,允许批注内容中是否显示行号。 【连接字符串】 可视化地窗体连接字符串功能。能将最多三个任意区域存储格(或列)的内容按自定的分隔符号...
  • 如何将PPT转word

    2011-12-10 22:58:29
    方法是将光标定位在除第一张以外的其他幻灯片的开始处,按〔BackSpace〕(退格键),重复多次,将所有的幻灯片合并为一张,然后全部选中,通过复制粘贴到Word中即可。 四将PDF转换成TXT的方法 方法一: 用以上...

空空如也

空空如也

1 2 3 4 5
收藏数 85
精华内容 34
关键字:

复制粘贴后只有第一行