写了一个小函数,来删除vim的swp和swo文件。

在normal模式下,输入\ds就可以删除该文件对应的swp和swo文件。

" 删除当前文件对应的swp和swo文件
function! DeleteSpaw()
	let l:fname = fnameescape(expand('%:t'))
	let l:swp = '.'.l:fname.'.swp'
	let l:swo = '.'.l:fname.'.swo'
	if CheckFile(l:swp)
		echom DeleteFile(l:swp) == 1 ? l:swp.' delete successfully' : l:swp.' delete faild '
	endif
	if CheckFile(l:swo)
		echom DeleteFile(l:swo) == 1 ? l:swo.' delete successfully' : l:swo.' delete faild '
	endif
endfunction

function! DeleteFile(filename)
	let l:del_result = delete(expand(a:filename))
	return l:del_result == 0 ? 1 : 0
endfunction

function! CheckFile(filename)
	" 对于不可以读取的文件,换成glob
	if filereadable(expand(a:filename)) 
		return 1
	else
		return 0
	endif
endfunction

" 调用删除swp,swo文件函数
nnoremap <leader>ds :call DeleteSpaw()<cr>

小结

  • 获取文件名expand(‘%:t’),参考help filename-modifiers
  • 文件相关的函数,filereadable(), delete()
  • 函数内部对参数使用,a:param

正则表达式

Magic

{test123}

  • Vim有四种不同的解析正则表达式的模式!!!真让人蒙蔽。。。

Nodejs is just a kind of of js..^_^

基本语法

pass

工程相关

模块

在模块中,用require()方法来引入外部模块。用exports对象用于导出当前模块的方法或变量,只有导出的变量或方法才能被其他模块使用。就像是oop中的public。这点和erlang有点像,erlang是声明一个导出列表-export([add/1,...]) 在模块中,module对象,代表自身,exports也是module的一个属性. 在nodejs中,一个文件就是一个模块.(其他编程语言也差不多)

require()的参数就是模块标识。参数可以是小驼峰命名的字符串(模块名?),
也可以是相对路径,或绝对路径。
  • 两种模块,Node提供的核心模块(fs,http,path…),用户编写的称为文件模块。

  • 模块加载,优先从缓存加载,核心模块加载,路径形式的模块,自定义模块(加载最慢,一种特殊的文件模块)

    • 自定义模块

        文件内容:
        console.log(module.paths);
        node ./test.js,输出如下:
        [ '/home/wm/code/nodejs/one_night/node_modules',
          '/home/wm/code/nodejs/node_modules',
          '/home/wm/code/node_modules',
          '/home/wm/node_modules',
          '/home/node_modules',
          '/node_modules' ]
        node查找自定义模块的规则:
        当前文件目录的node_modules目录下查找
        父目录的node_modules目录
        ...
        直到根目录下的node_modules目录
      
    • 引用了不同的模块,如果他们有相同的导出方法或属性。后面引用的模块会覆盖先引用的模块

        ./node_modules/demo.js内容:
        hello = function(){
            console.log("hello world");
        }
        exports.hello;
      
        ./node_modules/hi.js内容:
        hello = function(){
            console.log("hi world");
        }
        exports.hello;
      
        ./test.js内容如下:
        require('hi');
        require("demo");
        hello(); // 输出 hello world
        console.log(module.paths);
      		
        require("demo");
        require('hi');
        hello(); // 输出 hi world
      
    • 文件扩展名.当标识符没有扩展名时 Node会按.js .json .node的顺序依次补充扩展名,以此尝试

    • 目录分析和包

        在node_modules/目录下的子目录,可以做成一个包,package
        前提是,这个目录下要有一个package.json文件,并且文件能通过JSON.parse()解析出描述对象。
        比如main属性,指定文件名进行定位。
        如果没有package.json文件,node会依次查找index.js index.json index.node
      
        ./test.js内容如下:
        require("mypackage");
        test("guogu0"); // 输出 myname is guoguo
      
        在当前./node_modules/下发现了子目录./node_modules/mypackage/
        mypackage/目录下有package.json文件,内容如下
        {
            "name":"mypack",
            "version": "0.0.1",
            "main": "./src/bar.js" // 先对package.json文件的路径
        }
        通过main属性可知,这个mypackage包 指定的是 ./node_modules/mypackage/src/bar.js文件
        该bar.js文件内容如下:
        test = function(name) {
            console.log("myname is "+name);
        }
        exports.test = test;
      
        所以test.js在require("mypackage")的时候,其实是找到了一个目录,也就是一个包。