Skip to content

Commit 2156c58

Browse files
committed
Better IPv6 handling
Closes tpope#439
1 parent 1367b0a commit 2156c58

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

autoload/rails.vim

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1589,6 +1589,7 @@ function! s:Preview(bang, lnum, uri) abort
15891589
let binding = '0.0.0.0:3000'
15901590
endif
15911591
let binding = s:sub(binding, '^0\.0\.0\.0>|^127\.0\.0\.1>', 'localhost')
1592+
let binding = s:sub(binding, '^\[::\]', '[::1]')
15921593
let uri = empty(a:uri) ? get(rails#buffer().preview_urls(a:lnum),0,'') : a:uri
15931594
if uri =~ '://'
15941595
"
@@ -1802,22 +1803,29 @@ function! rails#get_binding_for(pid) abort
18021803
endif
18031804
if has('win32')
18041805
let output = system('netstat -anop tcp')
1805-
return matchstr(output, '\n\s*TCP\s\+\zs\S\+\ze\s\+\S\+\s\+LISTENING\s\+'.a:pid.'\>')
1806+
let binding = matchstr(output, '\n\s*TCP\s\+\zs\S\+\ze\s\+\S\+\s\+LISTENING\s\+'.a:pid.'\>')
1807+
return s:sub(binding, '^([^[]*:.*):', '[\1]:')
18061808
endif
18071809
if executable('lsof')
18081810
let lsof = 'lsof'
18091811
elseif executable('/usr/sbin/lsof')
18101812
let lsof = '/usr/sbin/lsof'
18111813
endif
18121814
if exists('lsof')
1813-
let output = system(lsof.' -an -itcp -sTCP:LISTEN -p'.a:pid)
1815+
let output = system(lsof.' -an -i4tcp -sTCP:LISTEN -p'.a:pid)
18141816
let binding = matchstr(output, '\S\+:\d\+\ze\s\+(LISTEN)\n')
1815-
return s:sub(binding, '^\*', '0.0.0.0')
1817+
let binding = s:sub(binding, '^\*', '0.0.0.0')
1818+
if empty(binding)
1819+
let output = system(lsof.' -an -i6tcp -sTCP:LISTEN -p'.a:pid)
1820+
let binding = matchstr(output, '\S\+:\d\+\ze\s\+(LISTEN)\n')
1821+
let binding = s:sub(binding, '^\*', '[::]')
1822+
endif
1823+
return binding
18161824
endif
18171825
if executable('netstat')
18181826
let output = system('netstat -antp')
1819-
return matchstr(output, '\S\+:\d\+\ze\s\+\S\+\s\+LISTEN\s\+'.a:pid.'/')
1820-
return binding
1827+
let binding = matchstr(output, '\S\+:\d\+\ze\s\+\S\+\s\+LISTEN\s\+'.a:pid.'/')
1828+
return s:sub(binding, '^([^[]*:.*):', '[\1]:')
18211829
endif
18221830
return ''
18231831
endfunction

0 commit comments

Comments
 (0)