是否有一个一次性命令可以将执行位添加到您正在编辑的 shell 脚本中并保存并退出?
答案1
据我所知,没有内置执行所有这一切的命令,但它是可以做类似的事情~/.vimrc
并预先做一些工作。
为了解决这个问题,需要将一些事情结合在一起:
- 在 vim 中同时运行多个命令
- 通过vim执行外部命令
- 如果您在当前文件仍处于打开状态时修改该文件(包括权限),则防止 vim 向您提供有关缓冲区的消息
- 定义方便的键绑定
- 使用 vim 函数
在这里,我使用的是 vim 函数这里当当前文件在 vim 关闭文件之前修改其权限时,它会处理运行外部命令并阻止缓冲区消息。它还将命令定义为:Xbit
.
function! SetExecutableBit()
let fname = expand("%:p")
checktime
execute "au FileChangedShell " . fname . " :echo"
silent !chmod a+x %
checktime
execute "au! FileChangedShell " . fname
endfunction
command! Xbit call SetExecutableBit()
:nnoremap <c-x> :w<CR>:Xbit<CR>:q<CR>
:inoremap <c-x> <Esc>:w<CR>:Xbit<CR>:q<CR>
此外,我在函数之后定义了假设映射,以使 vimCtrl+x
在正常模式和插入模式下定义为组合键,该组合将写入文件内容 ( :w
),运行函数以设置执行标志 ( :Xbit
),然后退出文件 ( :q
) 。
~/.vimrc
所有这些都需要在打开要使用的文件之前进入您的文件。但是,只需按Ctrl+x
(或您可能喜欢将键绑定更改为的任何其他内容)即可调用它。
来源:
- https://vim.fandom.com/wiki/Setting_file_attributes_without_reloading_a_buffer#:~:text=当%20创建%20scripts%20和%20other时,%20current%20buffer的%20file%20名称。
- https://stackoverflow.com/questions/3249275/multiple-commands-on-same-line
- https://balazshobbies.wordpress.com/vim-jegyzetek/napi-vim-bemelegito/vim-map-remap-nnoremap/