11package config
22
3- import "os"
3+ import (
4+ "os"
5+ "strings"
6+ )
47
5- func GetEditTemplate (osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
6- preset := getPreset (osConfig , guessDefaultEditor )
8+ func GetEditTemplate (shell string , osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
9+ preset := getPreset (shell , osConfig , guessDefaultEditor )
710 template := osConfig .Edit
811 if template == "" {
912 template = preset .editTemplate
@@ -12,26 +15,26 @@ func GetEditTemplate(osConfig *OSConfig, guessDefaultEditor func() string) (stri
1215 return template , getEditInTerminal (osConfig , preset )
1316}
1417
15- func GetEditAtLineTemplate (osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
16- preset := getPreset (osConfig , guessDefaultEditor )
18+ func GetEditAtLineTemplate (shell string , osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
19+ preset := getPreset (shell , osConfig , guessDefaultEditor )
1720 template := osConfig .EditAtLine
1821 if template == "" {
1922 template = preset .editAtLineTemplate
2023 }
2124 return template , getEditInTerminal (osConfig , preset )
2225}
2326
24- func GetEditAtLineAndWaitTemplate (osConfig * OSConfig , guessDefaultEditor func () string ) string {
25- preset := getPreset (osConfig , guessDefaultEditor )
27+ func GetEditAtLineAndWaitTemplate (shell string , osConfig * OSConfig , guessDefaultEditor func () string ) string {
28+ preset := getPreset (shell , osConfig , guessDefaultEditor )
2629 template := osConfig .EditAtLineAndWait
2730 if template == "" {
2831 template = preset .editAtLineAndWaitTemplate
2932 }
3033 return template
3134}
3235
33- func GetOpenDirInEditorTemplate (osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
34- preset := getPreset (osConfig , guessDefaultEditor )
36+ func GetOpenDirInEditorTemplate (shell string , osConfig * OSConfig , guessDefaultEditor func () string ) (string , bool ) {
37+ preset := getPreset (shell , osConfig , guessDefaultEditor )
3538 template := osConfig .OpenDirInEditor
3639 if template == "" {
3740 template = preset .openDirInEditorTemplate
@@ -50,17 +53,28 @@ type editPreset struct {
5053func returnBool (a bool ) func () bool { return (func () bool { return a }) }
5154
5255// IF YOU ADD A PRESET TO THIS FUNCTION YOU MUST UPDATE THE `Supported presets` SECTION OF docs/Config.md
53- func getPreset (osConfig * OSConfig , guessDefaultEditor func () string ) * editPreset {
56+ func getPreset (shell string , osConfig * OSConfig , guessDefaultEditor func () string ) * editPreset {
57+ var nvimRemoteEditTemplate , nvimRemoteEditAtLineTemplate , nvimRemoteOpenDirInEditorTemplate string
58+ // By default fish doesn't have SHELL variable set, but it does have FISH_VERSION since Nov 2012.
59+ if (strings .HasSuffix (shell , "fish" )) || (os .Getenv ("FISH_VERSION" ) != "" ) {
60+ nvimRemoteEditTemplate = `begin; if test -z "$NVIM"; nvim -- {{filename}}; else; nvim --server "$NVIM" --remote-send "q"; nvim --server "$NVIM" --remote-tab {{filename}}; end; end`
61+ nvimRemoteEditAtLineTemplate = `begin; if test -z "$NVIM"; nvim +{{line}} -- {{filename}}; else; nvim --server "$NVIM" --remote-send "q"; nvim --server "$NVIM" --remote-tab {{filename}}; nvim --server "$NVIM" --remote-send ":{{line}}<CR>"; end; end`
62+ nvimRemoteOpenDirInEditorTemplate = `begin; if test -z "$NVIM"; nvim -- {{dir}}; else; nvim --server "$NVIM" --remote-send "q"; nvim --server "$NVIM" --remote-tab {{dir}}; end; end`
63+ } else {
64+ nvimRemoteEditTemplate = `[ -z "$NVIM" ] && (nvim -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{filename}})`
65+ nvimRemoteEditAtLineTemplate = `[ -z "$NVIM" ] && (nvim +{{line}} -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{filename}} && nvim --server "$NVIM" --remote-send ":{{line}}<CR>")`
66+ nvimRemoteOpenDirInEditorTemplate = `[ -z "$NVIM" ] && (nvim -- {{dir}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{dir}})`
67+ }
5468 presets := map [string ]* editPreset {
5569 "vi" : standardTerminalEditorPreset ("vi" ),
5670 "vim" : standardTerminalEditorPreset ("vim" ),
5771 "nvim" : standardTerminalEditorPreset ("nvim" ),
5872 "nvim-remote" : {
59- editTemplate : `[ -z "$NVIM" ] && (nvim -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{filename}})` ,
60- editAtLineTemplate : `[ -z "$NVIM" ] && (nvim +{{line}} -- {{filename}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{filename}} && nvim --server "$NVIM" --remote-send ":{{line}}<CR>")` ,
73+ editTemplate : nvimRemoteEditTemplate ,
74+ editAtLineTemplate : nvimRemoteEditAtLineTemplate ,
6175 // No remote-wait support yet. See https://github.com/neovim/neovim/pull/17856
6276 editAtLineAndWaitTemplate : `nvim +{{line}} {{filename}}` ,
63- openDirInEditorTemplate : `[ -z "$NVIM" ] && (nvim -- {{dir}}) || (nvim --server "$NVIM" --remote-send "q" && nvim --server "$NVIM" --remote-tab {{dir}})` ,
77+ openDirInEditorTemplate : nvimRemoteOpenDirInEditorTemplate ,
6478 suspend : func () bool {
6579 _ , ok := os .LookupEnv ("NVIM" )
6680 return ! ok
0 commit comments