data-*作用

data-_ 属性用于存储私有页面后应用的自定义数据。
data-_ 属性可以在所有的 HTML 元素中嵌入数据
自定义属性前缀 “data-“ 会被客户端忽略
所以用 data-src 设置为 img 的 src 初始值,浏览到图片时,将其赋给图片的 src

方法一、事件监听

通过对 window 监听 scroll 事件判断是否加载
需要知道窗口显示区 a window.innerHeight
图片到距离页面顶部的距离 b getBoundingClientRect().top,a >b 时加载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const imgs= document.getElementsByClassName('img')

window.addEventListener('scroll',e=>{
imgs.forEach(
img=>{
const imgTop=img.getBoundingClientRect().top
if(imgTop<window.innerHeight){
const data_src=img.getAttribute('data-src')
img.setAttribute('src',data_src)
}
}
)

})

方法二、IntersectionObserver

需要浏览器支持

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const imgs= document.getElementsByClassName('img')
const loadImg=()=>{
entries.forEach(entry=>{
cosnt img=entry.target
const data_src=img.getAtrribute('data_src')
img.setAtrribute('src',data-src)
observer.unobserve(img)
})
}
const observer=new IntersectionObserver(loadImg)
// 目标元素能看到触发一次,目标消失一次

imgs.forEach(img=>{
observer.observe(img)
})


命令行模式

  • 正常模式
  • 插入模式
  • 替换模式
  • 可视化
  • 命令模式
    可以通过ECS从任何其他模式返回正常模式 v进入可视一般模式,V进入可视行模式 :进入命令行模式 i进入插入模式 R进入替换模式

基本操作

插入

在正常模式, 键入 i 进入插入模式。ecs 回到正常模式

缓存 标签 窗口

vim 会维护一系列打开的文件,称为 “缓存”。 一个 Vim 会话包含一系列标签页,每个标签页包含 一系列窗口 (分隔面板)。每个窗口显示一个缓存。 跟网页浏览器等其他你熟悉的程序不一样的是, 缓存和窗口不是一一对应的关系; 窗口只是视角。 一个缓存可以在 多个 窗口打开,甚至在同一 个标签页内的多个窗口打开。这个功能其实很好用, 比如在查看同一个文件的不同部分的时候。

命令行

  • :q 退出 (关闭窗口)
  • :w 保存 (写)
  • :wq 保存然后退出
  • :e {文件名} 打开要编辑的文件
  • :ls 显示打开的缓存
  • :help {标题}打开帮助文档
  • :help :w 打开 :w 命令的帮助文档
  • :help w 打开 w 移动的帮助文档

移动

  • 基本移动: hjkl (左, 下, 上, 右)
  • 词: w (下一个词), b (词初), e (词尾)
  • 行: 0 (行初), ^ (第一个非空格字符), $ (行尾)
  • 屏幕: H (屏幕首行), M (屏幕中间), L (屏幕底部)
  • 翻页: Ctrl-u (上翻), Ctrl-d (下翻)
  • 文件: gg (文件头), G (文件尾)
  • 行数: :{行数} 或者 {行数}G ({行数}为行数)
  • 杂项: % (找到配对,比如括号或者 /* */ 之类的注释对)
  • 查找:f{字符},t{字符},F{字符},T{字符}
  • 查找/到 向前/向后 在本行的{字符}
  • , / ; 用于导航匹配
  • 搜索: /{正则表达式}, n / N 用于导航匹配

编辑

  • i 进入插入模式
  • 但是对于操纵/编辑文本,不单想用退格键完成
  • O / o 在之上/之下插入行
  • d{移动命令}删除 {移动命令}
  • 例如, dw 删除词, d$ 删除到行尾, d0 删除到行头。
  • c{移动命令}改变 {移动命令}
  • 例如, cw 改变词
  • 比如 d{移动命令} 再 i
  • x 删除字符 (等同于 dl)
  • s 替换字符 (等同于 xi)
  • 可视化模式 + 操作
  • 选中文字, d 删除 或者 c 改变
  • u 撤销, 重做
  • y 复制 / “yank” (其他一些命令比如 d 也会复制)
  • p 粘贴
  • 更多值得学习的: 比如 ~ 改变字符的大小写

计数

  • 3w 向前移动三个词
  • 5j 向下移动 5 行
  • 7dw 删除 7 个词

修饰语

  • 你可以用修饰语改变 “名词” 的意义。修饰语有 i, 表示 “内部” 或者 “在内“, 和 a, 表示 ”周围“。
  • ci( 改变当前括号内的内容
  • ci[ 改变当前方括号内的内容
  • da’ 删除一个单引号字符窗, 包括周围的单引号

进阶

搜索和替换

:s (替换) 命令

  • %s/foo/bar/g ==>在整个文件中将 foo 全局替换成 bar
  • %s/[._]((._))/\1/g ==>将有命名的 Markdown 链接替换成简单 URLs

多窗口

  • 用 :sp / :vsp 来分割窗口
  • 同一个缓存可以在多个窗口中显示

扩展

  • vimtutor 是一个 Vim 安装时自带的教程
  • Vim Adventures 是一个学习使用 Vim 的游戏