Skip to content

Instantly share code, notes, and snippets.

@romgrk
Created August 8, 2018 21:24
Show Gist options
  • Save romgrk/3ececed4cee93f4d77fbbb56461b987d to your computer and use it in GitHub Desktop.
Save romgrk/3ececed4cee93f4d77fbbb56461b987d to your computer and use it in GitHub Desktop.
consumeVimModePlusService(service => {
/*
* MagicWord
*/
const magicWordRegex =
/([A-Z0-9]{2,}(?:_|[^\w\s]))|([A-Z0-9]{2,}(?:_|[^\w\s])?(?=\b|[A-Z][a-z0-9]))|([A-Za-z0-9][a-z0-9]*(_|[^\w\s])?(?=[A-Z]?))|(\w+)|[^\s\w]{1,2}/g
const magicWordRegexEnd =
/((_|[^\s\w])?[A-Z0-9]{2,}(?=\b|[A-Z][a-z0-9]))|((_|[^\s\w])?[A-Z0-9]{2,})|((_|[^\s\w])?[A-Za-z0-9][a-z0-9]*(?=(_|[^\w\s]|[A-Z])?))|(\w+)|[^\s\w]{1,2}/g
// camelCaseWordHere
// snake_case_word_here
// dash-case-word-here
// HTTPRequest
// UpperURL_snakeCASEHere_OK_OKOK_END
// key:value: value
class MoveToNextMagicWord extends service.getClass('MoveToNextWord') {
static commandPrefix = "custom"
wordRegex = magicWordRegex
}
class MoveToPreviousMagicWord extends service.getClass('MoveToPreviousWord') {
static commandPrefix = "custom"
wordRegex = magicWordRegex
}
class MoveToEndOfMagicWord extends service.getClass('MoveToEndOfWord') {
static commandPrefix = "custom"
wordRegex = magicWordRegexEnd
}
class MagicWord extends service.getClass('TextObject') {
static commandPrefix = "custom"
static command = false
wise = null
selectOnce = true
wordRegex = magicWordRegex
getRange (selection) {
const point = this.getCursorPositionForSelection(selection)
const {range} = this.getWordBufferRangeAndKindAtBufferPosition(point, {wordRegex: this.wordRegex})
return this.isA() ? this.utils.expandRangeToWhiteSpaces(this.editor, range) : range
}
}
const {AMagicWord, InnerMagicWord} = MagicWord.deriveClass(true)
MoveToNextMagicWord.registerCommand()
MoveToPreviousMagicWord.registerCommand()
MoveToEndOfMagicWord.registerCommand()
MagicWord.registerCommand()
AMagicWord.registerCommand()
InnerMagicWord.registerCommand()
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment