mirror of
https://github.com/esm7/obsidian-vimrc-support.git
synced 2026-07-22 05:00:25 +00:00
* feat: define and expose obsidian-specific vim commands jumpToNextHeading: g] jumpToPreviousHeading: g[ * Implement jumpToPreviousLink motion * Refactoring and implementing jumpToNextLink * refactor: new jumpToPattern function that can be used for motions * refactor: renamed file and removed unneeded exports * fix: return last found index even if fewer than n instances found, instead of undefined * feat: implement moveUpSkipFold and moveDownSkipFold * refactor: extract out helper functions for defining obsidian vim actions * refactor: split vimApi.ts into two files * refactor: add comment * refactor: update names, types, etc * feat: followLinkUnderCursor action * feat: jumpToLink now jumps to both markdown and wiki links * refactor: rename fns * refactor: add docstrings / change var names * feat: implement looping around * refactor: cleaner implementation of jumpToPattern * Change mappings for next/prev heading to [[ and ]] * Tiny fixes * docs: update docs now that some more motions are provided by default --------- Co-authored-by: Erez Shermer <erezshermer@gmail.com>
26 lines
867 B
TypeScript
26 lines
867 B
TypeScript
import { ObsidianActionFn } from "../utils/obsidianVimCommand";
|
|
|
|
/**
|
|
* Follows the link under the cursor, temporarily moving the cursor if necessary for follow-link to
|
|
* work (i.e. if the cursor is on a starting square bracket).
|
|
*/
|
|
export const followLinkUnderCursor: ObsidianActionFn = (vimrcPlugin) => {
|
|
const obsidianEditor = vimrcPlugin.getActiveObsidianEditor();
|
|
const { line, ch } = obsidianEditor.getCursor();
|
|
const firstTwoChars = obsidianEditor.getRange(
|
|
{ line, ch },
|
|
{ line, ch: ch + 2 }
|
|
);
|
|
let numCharsMoved = 0;
|
|
for (const char of firstTwoChars) {
|
|
if (char === "[") {
|
|
obsidianEditor.exec("goRight");
|
|
numCharsMoved++;
|
|
}
|
|
}
|
|
vimrcPlugin.executeObsidianCommand("editor:follow-link");
|
|
// Move the cursor back to where it was
|
|
for (let i = 0; i < numCharsMoved; i++) {
|
|
obsidianEditor.exec("goLeft");
|
|
}
|
|
};
|