使用Vim命令中的当前目录

Sac*_*han 8 vim

对于我的Haskell程序,我知道路径中的可执行文件名与我当前目录的名称相同.现在我想创建一个这样的映射:

:map <leader>rr :!curdir()<cr>
Run Code Online (Sandbox Code Playgroud)

但是,我所知道的唯一命令是getcwd(),它给了我整个路径,而不仅仅是目录的名称.

有没有一种简单的方法来只提取目录的名称?

ZyX*_*ZyX 14

使用

fnamemodify(getcwd(), ':t')
Run Code Online (Sandbox Code Playgroud)

要么

fnamemodify('.', ':p:h:t')
Run Code Online (Sandbox Code Playgroud)

.:h在第二种情况下是必要的,因为:p发出尾随路径分隔符(因此选择的最后一个路径组件:t现在是空字符串).

将其移动到您的映射使用中

:noremap \rr :!<C-r>=shellescape(fnamemodify('.', ':p:h:t'), 1)<CR><CR>
Run Code Online (Sandbox Code Playgroud)

.有关您不应该使用的原因的说明:map请参见此处.