From d82d0335b286bf138c6212a1aa41a641be922b01 Mon Sep 17 00:00:00 2001 From: coderiaser Date: Sun, 3 May 2026 16:01:46 +0300 Subject: [PATCH] feature: client: vim: rr for rename file --- HELP.md | 41 ++++++++++++++++++------------------ client/key/vim/index.js | 12 ++++++----- client/key/vim/index.spec.js | 18 ++++++++++++++++ client/key/vim/vim.js | 6 ++++++ 4 files changed, 52 insertions(+), 25 deletions(-) diff --git a/HELP.md b/HELP.md index a7ab6ea7..739f1e83 100644 --- a/HELP.md +++ b/HELP.md @@ -214,26 +214,27 @@ Then, start the server again with `cloudcmd` and reload the page. When the `--vim` option is provided, or the configuration parameter `vim` is set, the following hotkeys become available: -|Key |Operation -|:----------------------|:-------------------------------------------- -| `j` | navigate to next file -| `k` | navigate to previous file -| `dd` | remove current file -| `G` or `$` | navigate to bottom file -| `gg` or `^` | navigate to top file -| `v` | visual mode -| `y` | copy (selected in visual mode files) -| `p` | paste files -| `Esc` | unselect all -| `/` | find file in current directory -| `n` | navigate to next found file -| `N` | navigate to previous found file -| `md` | make directory -| `mf` | make file -| `tt` | show terminal -| `e` | edit file -| `cc` | copy -| `mm` | move +| Key |Operation +|:------------|:-------------------------------------------- +| `j` | navigate to next file +| `k` | navigate to previous file +| `dd` | remove current file +| `G` or `$` | navigate to bottom file +| `gg` or `^` | navigate to top file +| `v` | visual mode +| `y` | copy (selected in visual mode files) +| `p` | paste files +| `Esc` | unselect all +| `/` | find file in current directory +| `n` | navigate to next found file +| `N` | navigate to previous found file +| `md` | make directory +| `mf` | make file +| `tt` | show terminal +| `e` | edit file +| `cc` | copy +| `mm` | move +| `rr` | rename file Commands can be joined, for example: diff --git a/client/key/vim/index.js b/client/key/vim/index.js index a39bd894..981f6f19 100644 --- a/client/key/vim/index.js +++ b/client/key/vim/index.js @@ -1,5 +1,3 @@ -/* global CloudCmd */ -/* global DOM */ import vim from './vim.js'; import * as finder from './find.js'; import { @@ -35,12 +33,13 @@ const getOperations = (event, deps) => { prompt = globalThis.DOM.Dialog.prompt, preventDefault = event?.preventDefault?.bind(event), stopImmediatePropagation = event?.preventDefault?.bind(event), - promptNewFile = DOM.promptNewFile, + promptNewFile = globalThis.DOM.promptNewFile, toggleSelectedFile, Buffer = {}, createFindNext = _createFindNext, createFindPrevious = _createFindPrevious, createMakeFile = _createMakeFile, + renameCurrent, } = deps; return { @@ -56,7 +55,10 @@ const getOperations = (event, deps) => { setCurrentByName, }), escape: unselectFiles, - + rename: () => { + event.preventDefault(); + renameCurrent(); + }, remove: () => { Operation.show('delete'); }, @@ -72,7 +74,7 @@ const getOperations = (event, deps) => { makeDirectory: () => { event.stopImmediatePropagation(); event.preventDefault(); - DOM.promptNewDir(); + globalThis.DOM.promptNewDir(); }, terminal: () => { diff --git a/client/key/vim/index.spec.js b/client/key/vim/index.spec.js index b31e3d60..e1ca4eee 100644 --- a/client/key/vim/index.spec.js +++ b/client/key/vim/index.spec.js @@ -657,3 +657,21 @@ test('cloudcmd: client: vim: edit', async (t) => { t.calledWithNoArgs(CloudCmd.EditFileVim.show); t.end(); }); + +test('cloudcmd: client: vim: rename', async (t) => { + const DOM = getDOM(); + const renameCurrent = stub(); + + assign(DOM, { + renameCurrent, + }); + + const event = { + preventDefault: stub(), + }; + + await vim('rr', event, DOM); + + t.calledWithNoArgs(renameCurrent); + t.end(); +}); diff --git a/client/key/vim/vim.js b/client/key/vim/vim.js index 63452faa..95a27caf 100644 --- a/client/key/vim/vim.js +++ b/client/key/vim/vim.js @@ -42,6 +42,7 @@ export default (key, operations = {}) => { edit = noop, operationCopy = noop, operationMove = noop, + rename = noop, } = operations; if (key === 'Enter') @@ -128,6 +129,11 @@ export default (key, operations = {}) => { return end(); } + if (value === 'rr') { + rename(); + return end(); + } + if (key === 'd' && (visual() || prevStore === 'd')) { stopVisual(); remove();