我正在使用 VIM 的y
命令复制一些代码(多行),并希望使用p
-command 将其粘贴到文件中的其他位置。
但是,我想在对其进行一些更改后快速粘贴复制的代码。例如,我想将复制的代码转换为大写(复制“hello”但粘贴“HELLO”)。
附加示例是添加一些缩进:
复印:
function hello() {
}
但粘贴:
function hello() {
};
有什么快速的方法可以做到吗?使用最少的命令、文件/配置更改以及更好地使用标准方式/命令/框架来尽可能地做到这一点,因为我想要一个适用于许多平台(包括旧平台)的解决方案六、macOS 的 vim 等等。
PS 如果还有其他内置方法,特别是根据粘贴位置粘贴具有正确缩进的代码,我也很想知道。但是,仍然想了解如何在粘贴复制的内容之前对其执行随机正则表达式(即使它不是源代码)。
答案1
、vim
和(基于行)或, (基于字符)中'[
的标记用于标识先前更改或拉出/粘贴的文本的边界。']
`[
`]
因此>']
将缩进光标位置和之后粘贴文本末尾之间的代码p
。
gU`[
after p
/P
将从光标到粘贴开始的文本大写。
答案2
您不需要正则表达式搜索和替换来更改字母或单词的大小写。
~
可以翻转字母、单词、方向、选择等的大小写。例如,将光标移动到h
ofhello
并键入~w
以将整个单词更改为HELLO
gU
不会翻转大小写,而是将文本更改为大写。例如,如果你有hElLo
,那么将光标移动到h
并键入gUw
,它会变成HELLO
- gu 将文本更改为小写 - 例如,将光标移动到
H
HELLO 中,然后键入guw
将其更改为hello
。
这只是一个最小的概述。输入更多选项和详细信息:help case
。vim
您可能还想研究 vim 的宏/键映射功能来自动执行重复的编辑任务 ( :help macro
)。我通常会映射,
或;
到我目前需要的任何重复但临时的编辑任务(是的,我知道它们已经在 vi 中使用,但我很少(如果有的话)使用它们。而且它们都很方便地彼此靠近和.
),所以我可能会映射,
移动到行的开头,向前移动一个单词,然后从光标开始大写该单词:
:map , 0wgUw
之后,按下,
它将使一行中的第二个单词大写。例如,在包含 的行上function hello() {
,它将大写 HELLO。它不需要是完美的,它只需要做一件小事,如果我不得不重复做的话,这件事会很烦人(事实上,这通常是多次做同一件事的烦恼,并且知道我将不得不再做数十次或数百次,以激励我进行映射)
是的,可以创建一个宏来拉取整个函数,移动光标,粘贴并缩进它,然后将函数名称大写。我现在没有动力亲自去做这件事。不过,我建议将其分成两个映射 - 一个用于搜索^function
并提取整个内容,另一个用于粘贴并大写函数名称。 (像这样的东西就是我喜欢使用,
和;
用于临时地图的原因......按键彼此靠近非常方便)。
对于我在当前编辑的文件之外重复使用的内容,我将其映射到功能键或将其记录在寄存器中。我不经常这样做,因为我的大多数乏味的重复性任务都是高度情境化的,并且特定于我当前正在处理的任何事情......我倾向于在我的 ~/.vimrc 中为非常通用的东西定义功能键宏,例如通过管道传输当前段落par
以重新格式化。