https://shaobin-jiang.github.io/blog/posts/neovim-beginner-guide/02/

h → left
j → down
k → up
l → right

There are three modes.

Command Mode, Insert Mode, and Normal Mode.

Type : to enter the command mode, type i to enter the insert mode.

Mac 配置代理

Note: The word “environment” is misspelled in the title. The correct spelling is “environment” (with an ‘n’ before ‘ment’).

为终端设置永久代理

每次启动终端时都自动设置代理,可以将代理配置添加到你的 shell 配置文件(如 .bash_profile, .zshrc, .bashrc 等)。

如果你使用 zsh,编辑 .zshrc 文件:

nano ~/.zshrc

在文件末尾添加以下行:

export http_proxy=http://<代理服务器地址>:<端口>
export https_proxy=http://<代理服务器地址>:<端口>
export all_proxy=socks5://<代理服务器地址>:<端口>
 

按 Ctrl + X,然后按 Y 确认保存,最后按回车键退出。

执行以下命令使其生效:

source ~/.zshrc

如果你使用 bash,编辑 .bash_profile 或 .bashrc 文件:

nano ~/.bash_profile

在文件末尾添加以下行:

export http_proxy=http://<代理服务器地址>:<端口>
export https_proxy=http://<代理服务器地址>:<端口>
export all_proxy=socks5://<代理服务器地址>:<端口>
 

按 Ctrl + X,然后按 Y 确认保存,最后按回车键退出。

执行以下命令使其生效:

source ~/.bash_profile

你可以使用以下命令来验证是否正确设置了代理:

使用 curl:

curl -I <https://www.google.com>
 

配置环境变量 Mac and Windows

如果你使用的是 zsh(默认的 shell 在 macOS 10.15+),打开 ~/.zshrc 文件:

nano ~/.zshrc

在配置文件中添加你需要的环境变量。比如,如果你想设置 Neovim 的路径或某些特定的配置,可以添加如下内容:

export PATH="/Users/ferry/Documents/nvim-macos-arm64/bin/nvim:$PATH"

在 nano 中,按 Ctrl + X,然后按 Y 保存文件,最后按 Enter 退出。

通过运行以下命令,使更改立即生效:

  • 如果你编辑的是 ~/.zshrc:
source ~/.zshrc

which nvim
# 如果输入这个指令返可以回 Neovim 的安装路径,说明环境变量设置成功

插入一个新行(newline)

命令作用
o在当前行下面插入新行,并进入插入模式
O在当前行上面插入新行,并进入插入模式
A跳到行尾进入插入模式(不会新建行)
I跳到行首第一个非空字符进入插入模式

Yank

操作命令说明
复制当前行yy最常用,复制当前整行
复制当前行Y在大多数 Vim 中等同于 yy
复制 N 行5yy从当前行开始复制 5 行
复制到文件末尾yG从当前行复制到最后一行
复制到行首y0复制到行首(不包括当前字符前)
复制到行尾y$从光标复制到行尾

Move

命令功能
w下一个单词开头
b上一个单词开头
e当前/下一个单词结尾
ge上一个单词结尾

Shift+Tab

In normal mode, just press shift+>

Obsidian tricks

ctrol + tab 可以快速切换标签页,这个快捷键可以同时在obdidian和浏览器中使用

选中括号内内容(不包括 [])
Visual 模式:

vi[

或

vi]

结果选中:

C, U

选中整个 [](包括括号)

va[

Obsidian 配置双链和代码快捷键

安装 vim motion插件后
在.obsidian文件新建init.lua
insert:

-- 双链 `[[ content ]]`
vim.keymap.set("v", "[[", 'c[[<C-r>"]]<Esc>', { remap = false })
-- 代码 `content`
vim.keymap.set("v", "`", 'c`<C-r>"`<Esc>', { remap = false })

init.vimrc

" ==============================
" Obsidian Vim Markdown shortcuts
" ==============================
 
" Visual selection -> [[word]]
vnoremap [[ <Esc>`<i[[<Esc>`>a]]<Esc>
 
" Visual selection -> `word`
vnoremap ` <Esc>`<i`<Esc>`>a`<Esc>
 
" Visual selection -> *word*
vnoremap * <Esc>`<i*<Esc>`>a*<Esc>
 
" Visual selection -> **word**
vnoremap ** <Esc>`<i**<Esc>`>a**<Esc>

latest version

" ==============================
" Obsidian Vim Markdown shortcuts
" ==============================
 
" Visual selection -> [[word]]
vnoremap [[ <Esc>`<i[[<Esc>`>a]]<Esc>
 
" Visual selection -> `word`
vnoremap ` <Esc>`<i`<Esc>`>a`<Esc>
 
" Visual selection -> *word*
vnoremap * <Esc>`<i*<Esc>`>a*<Esc>
 
" Visual selection -> **word**
vnoremap ** <Esc>`<i**<Esc>`>a**<Esc>
 
" Visual selection -> ==word==
vnoremap <leader>= <Esc>`<i==<Esc>`>a==<Esc>

IDEA vim

快捷键功能
gdGo to Definition(定义)
gDDeclaration
grReferences(引用)
giImplementation(实现类)
gyType Definition

Idea hybrid line number

Enable the option

You can switch lines by using j and k

10 j
10 k

搜索 /

搜索完成后,回到 Normal 模式

/keyword<Enter>

输入完成后,按 Enter 就已经回到 Normal 模式了。

然后可以:

n:跳到下一个匹配
N:跳到上一个匹配

选中超链接

viW

https://www.example.com

切換標籤頁

in obsidian
go to nextTab

gt

go to previousTab

gT

刪除當前行,保留内容

S 

or

cc

更改单个字符

按 r + [新字符]:将光标所在位置的字符替换为新字符,且依然保持在 Normal(普通)模式。

配置 EasyMotion

Obsidian

Install Vim Motion plugin, enable the feature

Flash-style f/F/t/T Show labels on all visible matches when pressing f/F/t/T.Single match auto- jumps.

Idea Vim

"" 1. Enable the built-in EasyMotion extension
set easymotion
 
"" 2. Map standard f/F/t/T to EasyMotion's 1-character jump commands
map f <Plug>(easymotion-f)
map F <Plug>(easymotion-F)
map t <Plug>(easymotion-t)
map T <Plug>(easymotion-T)

Vscode Vim

{
  // 1. Enable built-in EasyMotion
  "vim.easymotion": true,
 
  // 2. Remap f/F/t/T to EasyMotion 1-character jump
  "vim.normalModeKeyBindingsNonRecursive": [
    {
      "before": ["f"],
      "after": ["<leader>", "<leader>", "f"]
    },
    {
      "before": ["F"],
      "after": ["<leader>", "<leader>", "F"]
    },
    {
      "before": ["t"],
      "after": ["<leader>", "<leader>", "t"]
    },
    {
      "before": ["T"],
      "after": ["<leader>", "<leader>", "T"]
    }
  ],
 
  // 3. Auto-jump to the target if there is only 1 match
  "vim.easymotionJumpToAnywhereRegex": "\\b[a-zA-Z0-9]",
  
  "vim.visualModeKeyBindings": [
    {
        "before": ["<", "<"],
        "commands": [
            "editor.action.outdentLines"
        ]
    },
    {
        "before": [">", ">"],
        "commands": [
            "editor.action.indentLines"
        ]
    }
]
 

分屏操作

1. 开启与关闭分屏

快捷键 / 命令动作说明
:sp [filename]上下分屏水平拆分窗口(或在 Normal 模式按 Ctrl+w s)
:vsp [filename]左右分屏垂直拆分窗口(或在 Normal 模式按 Ctrl+w v)
:q / Ctrl+w c关闭当前屏关闭光标所在的当前分屏
:only / Ctrl+w o仅保留当前屏关闭除了当前窗口以外的所有分屏

2. 在分屏间切换光标

所有窗口切换动作均以 Ctrl+w(即 Ctrl + w)开头:

  • Ctrl+w h:移动到 左 边窗口
  • Ctrl+w j:移动到 下 边窗口
  • Ctrl+w k:移动到 上 边窗口
  • Ctrl+w l:移动到 右 边窗口
  • Ctrl+w w:按顺序轮换切换到下一个窗口

3. 调整分屏大小与位置

调整窗口尺寸

  • Ctrl+w =:所有分屏等宽等高(最常用)
  • Ctrl+w + / Ctrl+w -:增加 / 减少当前窗口高度
  • Ctrl+w > / Ctrl+w <:增加 / 减少当前窗口宽度
  • :res +5 或 :vertical res +5:通过命令行精准调整高度/宽度
    移动窗口位置
  • Ctrl+w H(大写):将当前窗口移到最左侧(变为全高左右分屏)
  • Ctrl+w J(大写):将当前窗口移到最下方(变为全宽上下分屏)
  • Ctrl+w K(大写):将当前窗口移到最上方
  • Ctrl+w L(大写):将当前窗口移到最右侧
  • Ctrl+w r:顺时针旋转互换窗口位置