gh-liu / myNote

0 stars 0 forks source link

vim options #16

Open gh-liu opened 3 months ago

gh-liu commented 3 months ago

vim options

option 有三种类型:bool(可切换), number, string

如何设置 options:

  1. :set {option}: bool类型设置on,number/string类型显示当前值
  2. :set no{option}: bool类型设置off
  3. :set {option}!: bool类型值取反
  4. :set {option}?: 获取当前值
  5. :set {option}&: 重置默认值
  6. :set {option}={value}:set {option}:{value}: 给number/string类型设置值
  7. :set {option}+={value}: number类型加,string类型附加(若以逗号分割,自动加逗号)
  8. :set {option}^={value}: number类型乘,string类型前置(若以逗号分割,自动加逗号)
  9. :set {option}-={value}: number类型减,string类型移除(若以逗号分割,自动删逗号)

NOTE: option的值如果需要包含`,|,`, 需要在前面加\

local options

一些 options 可以只对 window 或 buffer 设置 每个 window 或 buffer 自己保存一份这些 options 的值

option 的 scope:

  1. local to buffer: 仅作用于当前 buffer, 有默认值
  2. local to window: 可以作用于当前 window 的所有 buffer, 或某个 buffer, 有默认值
  3. local to tab page: 仅作用于当前 tab, 目前仅有cmdheight, 有默认值
  4. global-local: 有一个 global 值和一个 local 值. 当 local 值不存在时,使用 global 值

一些场景:

  1. 分割窗口(splitting a window)时,原 window 的 local options 会被 copy 到新 window,保证两个窗口看起来是一致的
  2. 编辑新缓冲区(editing a new buffer)时,新 buffer 的 local options 使用全局值,因为原 buffer 的 local options 可能特定于当前 buffer的
  3. 编辑之前编辑过的缓冲区(editing a previously edited buffer)时,1) 如果这个 buffer 在当前 window 中已经被编辑过,使用当时的 window local options;2)否则使用最后一个编辑过该 buffer 的 window 关闭时的 window local options
  4. 特定缓冲区的本地窗口选项(local window options for specific types of buffers),通过:setlocal ...,不同 buffers 在同一 window 可以有不同的 window local options 值

special local window/buffer options

不会被 copy(使用原窗口值) 的 local window options:

  1. previewwindow: 只能有一个 previewwindow
  2. scroll: 特定于当前窗口
  3. winfixbuf: 特定于当前窗口
  4. winfixheight: 特定于当前窗口
  5. winfixwidth: 特定于当前窗口

不会被 copy(使用全局值) 的 local buffer options:

  1. filetype: 通过 autocommands 设置
  2. syntax: 通过 autocommands 设置
  3. bufhidden: 表示 |special-buffers|
  4. buftype: 表示 |special-buffers|
  5. readonly: 自动发现
  6. modified: 自动发现

如何设置 local options:

  1. :setlocal[!] ...: 和:set一样,但是只设置当前 buffer/window 的 local options,无 local 值则设置 global 值
  2. :set {option}<: 设置 option 的有效值为全局值:string 类型且 local 的 option 值被移除,其余的 option 被全局值覆盖
  3. :setlocal {option}<: 设置 option 的有效值为全局值:bool/number 类型且 local 的 option 值被移除,其余的 option 被全局值覆盖
  4. :setlocal {option}=: 使 string 类型的 local option 为空,则使用 global 值

如何设置 global options:

  1. :setglobal ...: 和:set一样,但是只设置 global options,但是不修改 local options

neovim

  1. vim.o = :set
  2. vim.go = :setglobal
  3. vim.bo = :setlocal for |global-local| option, :set otherwise
  4. vim.wo = set |global-local| option for current window, :set otherwise
  5. vim.wo[winid][0] = :setlocal for |global-local| option, :set otherwise
  6. vim.opt = :set
  7. vim.opt_global= :setglobal
  8. vim.opt_local = :setlocal

NOTE: vim.opt 已软弃用