Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vim:通过正则表达式复制并粘贴_Vim - Fatal编程技术网

vim:通过正则表达式复制并粘贴

vim:通过正则表达式复制并粘贴,vim,Vim,我希望最终能够编写一个vim宏(我还不知道如何编写),因为我确信我可以在vim中完成这项工作,但我还不知道基本原理 我想从git提交消息中获取分支名称(或者它的一部分——正则表达式的这一部分应该很简单),并用冒号将其粘贴到文件的顶部,希望将光标保留在最后 因此,当我开始时,文件看起来有点像这样: $ <-- cursor here # Please enter the commit message for your changes. Lines starting # with '#' wi

我希望最终能够编写一个vim宏(我还不知道如何编写),因为我确信我可以在vim中完成这项工作,但我还不知道基本原理

我想从git提交消息中获取分支名称(或者它的一部分——正则表达式的这一部分应该很简单),并用冒号将其粘贴到文件的顶部,希望将光标保留在最后

因此,当我开始时,文件看起来有点像这样:

$ <-- cursor here
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch JIRA-1234-some-description-here
# Your branch is up to date with ...
理想情况下,也将我保留在插入模式。

假设您正在使用,您可以使用
逃犯#head()
获取当前分支名称。您可能可以这样做(放入
vimrc
文件):

注意:我还没有测试过这一点。

假设您正在使用,您可以使用
逃犯#head()
获取当前分支名称。您可能可以这样做(放入
vimrc
文件):


注意:我还没有测试过这个功能。

您可以使用这个功能:

function! MyFunction()                                                      
  g/On branch \([A-Z]*-[0-9]*\)/exe "co0 | 1s/.* \\(.*-\\d\\+\\).*/\\1:/g"
  normal $                                                                  
endfunction     
然后映射它:

nmap <leader>f :call MyFunction()<cr>                   
nmap f:callmyfunction()

功能说明:全局命令
g/{pat}/[cmd]
在模式
{pat}
匹配的行上执行命令
[cmd]
。您已经在问题中提供了
{pat}
。然后,要执行多个命令,我建议使用
exe
。此处
exe
将匹配的行复制到第一行(
co0
),并执行替换(
1s/../\\1:/g
)。

您可以使用此功能:

function! MyFunction()                                                      
  g/On branch \([A-Z]*-[0-9]*\)/exe "co0 | 1s/.* \\(.*-\\d\\+\\).*/\\1:/g"
  normal $                                                                  
endfunction     
然后映射它:

nmap <leader>f :call MyFunction()<cr>                   
nmap f:callmyfunction()

功能说明:全局命令
g/{pat}/[cmd]
在模式
{pat}
匹配的行上执行命令
[cmd]
。您已经在问题中提供了
{pat}
。然后,要执行多个命令,我建议使用
exe
。这里
exe
将匹配的行复制到第一行(
co0
),并执行替换(
1s/../\\1:/g
)。

您可能不想在Vim中执行此操作,但可以将与提交消息模板结合使用如果您确实想在Vim中执行此操作,您可能更愿意询问我是否确实执行了此操作,但使用了git挂钩。您可能不希望在Vim中执行此操作,但请将与提交消息模板结合使用如果您确实希望在Vim中执行此操作,您可能更愿意询问我是否确实执行了此操作,但使用git钩子。