对于我编写的Haskell程序,我知道可执行文件在路径中的名称与当前目录的名称相同。现在我想创建一个映射,如下所示:
:map <leader>rr :!curdir()<cr>
然而,我所知道的唯一命令是getcwd()
,它会给我整个路径而不是只有目录的名称。
有没有一种简单的方法仅提取目录的名称?
对于我编写的Haskell程序,我知道可执行文件在路径中的名称与当前目录的名称相同。现在我想创建一个映射,如下所示:
:map <leader>rr :!curdir()<cr>
然而,我所知道的唯一命令是getcwd()
,它会给我整个路径而不是只有目录的名称。
有没有一种简单的方法仅提取目录的名称?
使用
fnamemodify(getcwd(), ':t')
或者
fnamemodify('.', ':p:h:t')
在第二种情况下,:h
是必需的,因为 :p
会发出尾部路径分隔符(因此由 :t
选择的最后一个路径组件现在为空字符串)。
要将此移入您的映射中,请使用:
:noremap \rr :!<C-r>=shellescape(fnamemodify('.', ':p:h:t'), 1)<CR><CR>
关于为什么不应该使用:map
的描述,请参见这里。
split(getcwd(), "/")[-1]
/
不是必需的。 - ZyX\
或/
”。Markdown解析器在这里有些原因认为在反引号-反斜杠-反引号序列中反斜杠是转义反引号。反引号-反斜杠-反斜杠-反引号也不起作用:反引号会被显示为:\\
。 - ZyX:
作为目录分隔符。 - dash-tom-bang
:!
)后,键入“C-R =”,然后是下面的 vimscript 解决方案之一。 - darcyparker/
是路径分隔符的人是错误的。假设/
和\
都是路径分隔符的人同样是错误的。而且,假设\
在 Windows 上始终是路径分隔符的人也是错误的。我也不知道在什么情况下路径分隔符会是:
,但可能是这样。大多数 *nix 系统可以在文件名中包含\
和:
。 - ZyX