83 lines
3.7 KiB
Markdown
83 lines
3.7 KiB
Markdown
Vim and Powershell
|
|
|
|
Back in the days when Powershell was just a young pup there were a few
|
|
Vim users contributing to Vim via [plugins][1] to make writing powershell
|
|
a nicer experience. Syntax highlighting, auto filetype detection, snippets
|
|
and other quality of life things.
|
|
|
|
---
|
|
|
|
Since then, the release and rise of VSCode with it's strong Powershell
|
|
integrations have drawn most developer types away from Vim and new QOL features
|
|
have been few and far between.
|
|
|
|
I haven't given up on using Vim for powershell however for a few reasons:
|
|
|
|
* Battery life.
|
|
|
|
I spend most of my time running off laptops, and VSCode and other electron
|
|
based apps are designed for development speed first, execution speed second.
|
|
Running a terminal based app all day vs running an electron app can make
|
|
a serious difference to your battery life.
|
|
|
|
* Updates too often.
|
|
|
|
Every update to a tool like VSCode broadens it's audience and makes it a
|
|
great tool for more people. This is great to make an app with thousands of
|
|
features that each user will use a tiny sliver of those features.
|
|
I, on the other hand don't need or want 99% of those features.
|
|
|
|
* Focusing your skills
|
|
|
|
I'm pretty much a generalist in skills in IT, but there are a few tools
|
|
were I keep my focus to be as effective as possible. Using Vim well is one
|
|
of them
|
|
|
|
So with all this, I have been searching for a while for a plugin to make some
|
|
QOL improvements to Vim. A couple of months ago I stumbled upon [ale][2] a
|
|
general plugin that can be adapted to any language. It started out for
|
|
[linting][3] as the name implies, but it had grown to support fixing and
|
|
completion too.
|
|
|
|
At the time, there was an [issue](https://github.com/w0rp/ale/issues/1264)
|
|
raised to add [PSScriptAnalyzer][4] as a linter, and so I decided to see if
|
|
I could understand how to add a linter to ale.
|
|
|
|
I didn't know the [VimScript][5] language and trawling through the ale codebase
|
|
didn't make much sense to me. The project has some developer documentation,
|
|
however it assumes pre-knowledge of VimScript. That's when I did something
|
|
out of character. I read a book. [Learn VimScript The Hard Way][6] by Steve
|
|
Losh. It was a fun and enjoyable read, especially following along with the
|
|
exercises. I highly recommend reading it, even if you only have an interest
|
|
in using Vim.
|
|
|
|
Toward about half-way through reading the book, I felt confident enough to
|
|
have another crack at the PSScriptAnalyzer linter. This time the codebase
|
|
made much more sense to me and I was able to get a nicely working prototype
|
|
done in a morning.
|
|
|
|
Since then, I've written some tests, documentation and created a pull request
|
|
which was merged today on the ale project.
|
|
|
|
To use it, you just need to install the ale plugin. It defaults to using
|
|
PowerShell core, so if you want to use `powershell.exe` you will need to read
|
|
the help: `:help ale-powershell` to see the variable to override this setting.
|
|
Of course you will also need to have the PSScriptAnalyzer module installed.
|
|
|
|
Finally, there is one issue you can encounter particularly on windows
|
|
(btw, I've used it fine on Linux and MacOS), if you launch Vim using
|
|
`powershell.exe` but ale is using `pwsh.exe`, Vim will pass it's inherited
|
|
environment variables to it's child processes. This can lead to an issue where
|
|
the variable `$Env:PSModulePath` contains paths for `powershell.exe` and not
|
|
`pwsh.exe`, therefore if you don't have the PSScriptAnalyzer module installed
|
|
in both shells, ale won't be able to do any linting for you.
|
|
|
|
Tags: powershell, vim, ale
|
|
|
|
[1]:https://github.com/PProvost/Vim-ps1
|
|
[2]:https://github.com/w0rp/ale
|
|
[3]:https://en.wikipedia.org/wiki/Lint_%28software%29
|
|
[4]:https://github.com/PowerShell/PSScriptAnalyzer
|
|
[5]:https://en.wikipedia.org/wiki/Vim_(text_editor)#Vim_script
|
|
[6]:http://learnvimscriptthehardway.stevelosh.com/
|