我想大多数习惯了vim的人使用一个新的编辑器一定会想问这个编辑器能用vim吗,这个编辑器怎么将 jj 映射到 Esc?作为一名vim爱好者,我也有同样的疑问
jupyter notebook默认只能修改命令模式,在编辑模式下无法设置快捷键,这让我很不爽,一度想放弃使用它,直到我知道了下面这个项目
项目地址:lambdalisue/jupyter-vim-binding
这个项目能够让我们在jupyter notebook开启vim模式,大大提升我们的工作效率
安装方法
只要在终端分别运行下面的代码,就可以成功安装插件
# Create required directory in case (optional)
mkdir -p $(jupyter --data-dir)/nbextensions
# Clone the repository
cd $(jupyter --data-dir)/nbextensions
git clone https://github.com/lambdalisue/jupyter-vim-binding vim_binding
# Activate the extension
jupyter nbextension enable vim_binding/vim_binding
如果Activate the extension没成功,重启下终端就行了
然后再打开jupyter notebook就可以看到一个绿色的方块,说明已经开启了vim模式
此时jupyter notebook有三种模式:jupyter 模式、command模式、insert模式
使用:q
可以从vim的command的模式切换成jupyter模式
将 jj 映射到 Esc
在~/.jupyter/custom/custom.js
处创建一个custom.js
(默认没有这个文件)
然后将下面的代码加到custom.js即可
// Configure CodeMirror Keymap
require([
'nbextensions/vim_binding/vim_binding', // depends your installation
], function() {
// Map jj to <Esc> 这里我加了个l,是为了保证光标在同一个位置
CodeMirror.Vim.map("jj", "<Esc>l", "insert");
// 我自定义的快捷键
CodeMirror.Vim.map("H", "^", "normal");
CodeMirror.Vim.map("L", "$", "normal");
CodeMirror.Vim.map("dH", "d0", "normal");
// 设置Q从command模式切换到jupyter模式
CodeMirror.Vim.map("Q", ":q", "normal");
// Swap j/k and gj/gk (Note that <Plug> mappings)
CodeMirror.Vim.map("j", "<Plug>(vim-binding-gj)", "normal");
CodeMirror.Vim.map("k", "<Plug>(vim-binding-gk)", "normal");
CodeMirror.Vim.map("gj", "<Plug>(vim-binding-j)", "normal");
CodeMirror.Vim.map("gk", "<Plug>(vim-binding-k)", "normal");
});
// Configure Jupyter Keymap
require([
'nbextensions/vim_binding/vim_binding',
'base/js/namespace',
], function(vim_binding, ns) {
// Add post callback
vim_binding.on_ready_callbacks.push(function(){
var km = ns.keyboard_manager;
// Allow Ctrl-2 to change the cell mode into Markdown in Vim normal mode
km.edit_shortcuts.add_shortcut('ctrl-2', 'vim-binding:change-cell-to-markdown', true);
// Update Help
km.edit_shortcuts.events.trigger('rebuild.QuickHelp');
});
});
如何还想映射其他vim快捷键,只要按照上面的代码格式修改就行了
写在最后:我的博客主要是对计算机领域所学知识的总结、回顾和思考,把每篇博客写得通俗易懂是我的目标,分享技术和知识是一种快乐 ,非常欢迎大家和我一起交流学习,有任何问题都可以在评论区留言,也期待与您的深入交流(^∀^●)