Some Awesome Vim Plugins

My configuration file is always changing. Vim is so flexible and powerfull, and the plugin authors so productive, that from time to time I spent a few hours looking for new plugins and tricks and retuning my configuration file. In this article I will comment the coolest plugins I use trying to explain why I find them to be so good.

(Note: click on the images to see the full size)

CtrlP

If like me you usually work with projects that involve involve working with lots of different source code files this script provides an incredibly productivity boost. Once you have assigned your shortcuts to the different functions, you will be able to search with an incremental search (results are being removed as you write) for:

  • Files in the 'root' directory or any subdirectory
  • Open buffers
  • Recently used files
  • Tags

As described it doesn't sound like much, but it's incredible how much time this plugin will save from the old methods of searching for files with some file explorer (inside or outside Vim), or looking at a buffer list and changing to a specific buffer with the keyboard or by a number. I used Vim sessions a lot (done with :mksession [file]) but you always ended having to open (and painfully search) for more files. With this you just press the shortcut, start to write part of the name of the file or buffer you want to open, and in a few keypresses you will have it opened. You have to try it. And combined with the Project plugin I'll comment on the next section for opening the files that you don't have in your MRU list, the productivity boost is just absurd

The modes I mostly use are "MRU" or "CtrlPMRUFiles" (most recently used) and Buffers (CtrlPBuffer). The "files" mode (CtrlP) is useful if all your project files have a common root, which is usually the case with my personal projects but not with my projects at work because I usually have files from non coupled different libraries in different directories, RPC definitions, etc, and setting the parent directory of all these projects as root would slow too much the file mode search. I sometimes also use the CtrlPBufTagAll command that (when you have exuberant ctags installed) allows you to search in the symbols of all the open buffers.

The MRU search mode can sometimes also be slow to open when you have lots of recent files (as you will once some time has passed since you start to use the plugin). I fixed this problem by enabling some catching options that CtrlP has.

Ctrlp has made me stop to use (and remove) several Vim plugins I had installed (but were worse) for the MRU, buffer explorers and files functionalities. Also, since switching buffers is so convenient now, I've mostly stopped using tabs.

Project

If you've used some graphical IDE like Visual Studio or Eclipse you surely have seen the typical "Project" sidebar with expandable directories with list of files inside. These sidebars are very useful when you want to keep all the files in the project logically grouped and just one or two clicks away. We, superior and condescendent Vim people don't do clicks, but that doesn't mean that we can find some ideas from IDEs interesting.

The Project Vim plugin provides exactly that, a sidebar where you can see all the source code (or related) files grouped in folds by directory, and you only have to move the cursor to the file and press the Intro key to open it as a buffer. After reading the previous section you can think that a plugin like CtrlP makes these kind of sidebars obsolete, but while it's true that I've been using my Project shortcut much less since I use CtrlP, its still very useful because it allows you to open all the files from a project or part of it quickly when you are starting to work on it (using "\l" when over the fold), grepping only over the project files (\G). Also, you can keep as many projects as you want in the sidebar. It's also very useful if like me you sometimes want to open several files from different (but related) projects.

Project.vim has a lot of features so I recommend you to take a look to the documentation before using it.

TagBar

TagBar provides another typical feature from graphical IDEs which usually have a sidebar were you can see the project symbols organized in a tree (classes, methods, functions, variables, etc). This is not only useful to jump to a symbol quickly, but also allows you to have an overview of the internal logical structure of the source file.

TagBar provides exactly that, a browsable tree of symbols that you can jump to just moving the cursor over one of them and pressing Intro. As happens with other plugins, CtrlP has reduced the number of times I use this plugin because now I use CtrlPBufTagAll to search and jump to a particular tag, but sometimes it's nice to see the symbols of the file in a tree to have an overview of the file (specially if you didn't write it) and to remember some symbol whose name you just forgot (CtrlP can't help you in that case).

SnipMate

SnipMate is a feature taken from TextMate. The idea is simple, you write some bit of text and press the Tab key and the editor autocompletes that to a full snippet.

For example, to write a class in Python you would write "cl", press tab, and it would be completed to:

class ClassName(object):
    """docstring for ClassName"""
    def __init__(self, arg):
        super(ClassName, self).__init__()
        self.arg = arg

Now, pressing Tab again will make the cursor move to the different "variable" parts of the snippet so you can write them; in the class example the parts would be the ClassName, object, docstring, init arguments and super() call.

SnipMate includes several snippets for some programming languages and some common ones, but it's very easy to define new snippets.

Powerline

Powerline improves Vim status bar with colors that change depending on the active mode (and for some plugins like CtrlP and Tagbar) and also reorganizes the information in a much more intuitive way. Also, if you patch the fonts (with an included script) it will use some pseudographical characters to make a clearer the distinction between the different bits of information (see the screenshot). The font patching, unfortunately, only seem to work in Linux and Mac (please correct me in the comments if I'm wrong).

Nerd Commenter

Nerd Commenter allow you to comment or uncomment lines or sections of code (previously selected in visual mode in the cases sections). This doesn't sound remarkable, but the things is that Nerd Commenter understand lots of different programming languages and the way commenting is done in every one. With some languages like HTML, XML or Django templates this is a real time saver.

YankRing

This plugin improves Vim's copy-and-paste system (aka yanking) with an easy to use "clipboard" where you can easily select a configurable number of past registers (saved text). Since Vim automatically puts the text you delete in the clipboard sometimes what you paste is not what you were expecting. This plugin avoid this problem, letting you paste exactly what you want. It's like an overpowered version of the :registers command.

Battlefield 3 beta for PS3 quick impressions

So, I got to play some hours of Battlefield 3 beta for the PS3 yesterday.

Quick impressions:

What I liked:

  • The sound is awesome
  • The realistic weapon recoil
  • The Metro map is beautiful
  • The rush gamemode made for some exciting playing
  • The PS3 graphics are fine (better than COD), but not up to the hype
  • The control is better than Bad Company 2

What I didn't like:

  • EVERY SINGLE TIME that I made a squad with two friends, it splitted it when joining a game. Sometimes even on opposing teams.
  • We couldn't manage to get the voicechat to work the few times that it put two of us in the same squad. Extremely annoying.
  • Bugs, bugs, bugs. Spawn trapped in the ground, see everything in blue or purple hues, color "flashes", suddendly you couldn't aim or run, etc, etc, etc...
  • The PS3 graphics are fine (better than COD), but not up to the hype.
  • Only one map (Metro) and one gamemode (Rush). No conquest, no vehicles. If EA is releasing the beta with the hope of convincing undecided some players to buy the game, they're doing it wrong.
  • Too many COD-style players trying to run into the objectives alone or completely ignoring it, without waiting for the squad mates to spawn around. Nobody tagged the enemies.
  • The controls are not as direct and fast as COD.

Veredict:

If they fix all the bugs it can be a fun game to play. But it won't dethrone COD on copies sold yet.

A hint for Android smartphone makers

Almost every day on my Google Reader's collection of feeds I read rumors or facts about new Android handsets. Almost always the things have a ridiculous amount of CPU power (for a phone) more RAM memory and higher resolution screens. None of which excites me even a bit.

I used to change my phone every 6-8 months. When the iPhone 3G was released, I was excited to see how nice the interface and potential was with the app store, compared to my Nokia 6630. But it was too limited, too closed and too slow. Then I got the HTC Dream, the first Android phone. Even if it was butt-ugly I loved the openness and features of the phone. But it was also slow. Then, I got a Nexus One phone and not only it was physically beautiful and nice, it was also fast. In the Nexus One, apps open almost instantly and interactions with apps (menus, buttons, screen change) are also damn fast. This was at the start of 2010. Since then, a lot of new smartphones have hit the market but not a single one of them have excited me enough to change my Nexus. So as of date, I've keept my Nexus for 18 months, while in the past I would usually have changed two or three times during this period.

The reason is that the new phones doesn't offer any value for me are mostly:

  • Bigger screens: it is a phone and I really think that the Nexus 3.7'' is a reasonable limit for a phone screen. 4'' could make it, but no more.

  • Better screen resolution: which is not much of an improvement on a 3.7'' screen.

  • More cores, higher CPU cycles, more RAM: my Nexus is pretty fast with current Android versions (thanks Google for not WindowVista-izing the OS), and I don't feel a need for more RAM memory. Probably people playing 3D games on the phone will appreciate the difference, but I don't play games on the phone.

  • More megapixels in the camera: more megapixels are not more quality.

  • 4G: which currently doesn't works here in Europe.

What I would like to see on new phones:

  • Picoprojector: I want to show my friends/coworkers the latest lolcat video or that awesome Call of Duty match I uploaded to youtube on the wall. I want to see films on divx on my hotel room. I want to show that car show photo album without having 8 heads over my phone. These projectors doesn't need to be very high resolution of produce a huge screen on the wall.

  • More battery time: instead of releasing a phone with 4 cores a graphic accelerator and a huge resolution, release phone with the power and resolution of the Nexus but with 3 or 4 days of autonomy. It's a pain on the a** having to charge the phone mid-day, and all new phones are the same.

  • Frontal camera: Skype, Google talk, etc support or will support videocalling. Ok, some new Android phones have this, but it on itself not enough for me to change.

  • Digital TV receiver: Phones capable of receiving digital TV have been available for years (I saw one imported from China in 2008). Combined with a picoprojector could let you have a TV anywhere.

Sometimes it looks like phone makers are waiting for Apple to innovate and then make copycat of the new Apple's features and tagging their phones "iPhone killers". Sorry, they are not killers, they are copiers at most and now that Apple is mostly there with Android on OS features (notifications, multitasking, etc) Android makers could take a big hit if a new iPhone includes some real hardware innovation.

Cómo no ser un imbécil

Aunque el título de este artículo puede parecer provocador, en el contexto de lo que voy a hablar imbécil es la palabra más adecuada si examinamos su etimología. Imbécil viene de la palabra latina imbecillus, que más tarde pasó a ser imbecillis. Significa "el que necesita bastón", aunque los romanos al parecer también la aplicaban a aquellos débiles de espíritu que necesitan de otras personas para guiarles. Es esta última acepción la que voy a usar en este artículo para explicar como no ser un imbécil.

El mundo de hoy está lleno de imbéciles. Gente que es absolutamente del PP o del PSOE, de Greenpeace o anti-nuclear, favorable a Israel o a Palestina, de Linux o de Windows o de Mac (o anti-linux, anti-windows o anti-mac). En muchas ocasiones, por no decir la mayoría, si uno habla con ellos y les pregunta porqué ese seguidismo, responden con vaguedades como "porque es el partido de los trabajadores", "porque es software libre", "porque estamos arruinando el mundo", sin saber casi nunca ser más específicos o tener un conocimiento más profundo de las ideas y sobre todo los actos de sus organizaciones o productos guía, sus gurús.

Hay una minoría de no-imbéciles que si parece tener una opinión clara a favor o en contra de algo tras haber estudiado con sentido crítico todo lo que rodea a ese algo, no sólo los hechos o personas que están a favor, sino también en contra (independiéntemente de la intensidad con la que estén a favor o en contra). Y justamente por eso no son imbéciles

Nótese que aquí no meto los temas deportivos, estético-culturales o los productos de entretenimiento. Los deportes, al igual que los productos de entretenimiento, existen para que tomemos partido irracionalmente por un equipo, disfrutemos viéndolo ganar o suframos viéndolo perder. No se es imbécil por preferir Star Wars a Star Trek (los trekkies no estarían de acuerdo, supongo) o por "ser" del Real Madrid en lugar del Barça. Lo imbécil en este caso sería pretender lo contrario. Con los productos culturales que afectan a nuestro sentido de la estética sin mayor utilidad, como la pintura, la escultura o la música, tampoco se es un imbécil porque a uno le guste algo o deteste otra cosa, ya que al igual que con los deportes, esas elecciones no suelen venir dadas por la racionalidad, ni tampoco afectan demasiado a la vida. De nuevo, el imbécil es el que pretende que a uno que no le gusta el arte contemporáneo, pongamos por ejemplo una mierda metida en una lata (sí, existe) intente forzar a los demás a que lo entiendan. El arte o la música no se entienden, te gusta o no te gusta, punto.

La clave para no ser un imbécil es sencilla: aunque tengamos una opinión formada sobre algo, especialmente temas que puedan afectar (aunque sea potencialmente) a nuestras vidas y las de los que vengan detrás, siempre hay que hablar y leer a gente con otros puntos de vista. Ésto es muy fácil de hacer hoy en día, gracias a Internet, y puede expresarse como una lista de máximas:

  • Lee a los llamados líderes de opinión, pero que que tu opinión no se forme automáticamente como una copia de la suya. Se tu propio lider de opinión. Yo leo las columnas semanales de Arturo Perez-Reverte. Estoy de acuerdo en lo que dice casi siempre, pero en ocasiones (pocas) no estoy de acuerdo o estoy totalmente en desacuerdo, y no por ello me siento ofendido o traicionado ni dejo de leerlo. En contraposición, también leo a veces a Salvador Sostres, un tipo al que considero que es al mismo tiempo lider de opinión e imbécil (está totalmente cegado y no ve más allá de cierta definición estrechísima de la vida), y sin embargo a veces he estado de acuerdo con lo que dice en algún artículo o me ha dado una información sobre algo que no he podido obtener en otro lado.

  • Hay que leer o al menos ojear periódicos con sesgos muy distintos como El País, El Mundo, ABC, y también (o especialmente también) periódicos más radicales como Libertad Digital, Intereconomía, El Plural o Público. Aunque alguno nos de nauseas. Hay que escuchar a Luis del Olmo y Jimenez los Santos. No hay que creerse en ningún caso que los periódicos informan sin intentar manipular, la gracia está en ver como cada cual intenta manipular las noticias hacia su campo, como el planteamiento de una pregunta a un entrevistado enfoca ya la opinión del entrevistador, las omisiones o exageraciones que hacen unos y otros al cubrir una noticia.

  • Buscar siempre lo políticamente correcto es un camino directo hacia la imbecilidad.

  • Instala Windows, úsalo un mes, instala Mac, úsalo un mes, instala Linux, úsalo un mes (si instalas Linux, prueba varias distribuciones) . Decide cual te gusta más y porque. Si odias Linux o Mac o el iPhone o la Wii sin haberlos usado nunca, lo siento, eres imbécil.

  • Hay que leer argumentos de científicos que defiendan que nos estamos cargando el planeta debido a un calentamiento global causado por el hombre, pero también, y quizás con más ahínco, la de científicos que no piensan que exista un calentamiento global o que no esté causado por el hombre. Si tienes la capacidad para ello, lee algunos papers de ambos campos. Escucha también los argumentos de nucleares y antinucleares. Si los medios dan más espacio (o sólo dan espacio) a cierta opinión, como en el caso del calentamiento global, compénsalo gastando más tiempo en leer a la opinión contraria.

  • Cuando en los medios y imbecilado general (imbecilado general = comunidad que agrupa a todos los imbéciles) tengan una opinión única e indiscutible sobre algún tema, desconfía y desconfía con todas tus fuerzas, busca opiniones alternativas.

  • Cuando surja una noticia nueva sobre algo en lo que no estés muy informado (el estallido de una nueva guerra o revolución en otro país, huelga de controladores aéreos o conductores de autobús, etc), espera un tiempo para indagar sobre el tema y las opiniones enfrentadas de gente más informada que tu al respecto de ese tema (que, generalmente, no van a ser periodistas). Cuando surge una noticia de cierta importancia y que al mismo tiempo es más o menos neutral al sesgo genérico de cada de comunicación, estos tienden a dar un sesgo a las noticias favorable a la opinión mayoritaria, porque es lo que más vende. Busca la opinión minoritaria, busca lo que dice "el otro lado", si no lo encuentras en los medios, mira en foros o twitter, aunque hay que tener paciencia con esos medios pues suelen estar llenos de imbéciles repitiendo, amplificando, la opinión mayoritaria. Debes buscar los hechos detrás de las opiniones enfrentadas, no basar tu decisión en la cantidad de partidarios de una y otra. 2+2 no serían cinco ni aunque lo creyese el 95% de la gente.

  • Es muy fácil formarse una opinión automáticamente contraria a todo lo que nos perjudica personalmente a corto plazo (impuestos, salarios, derechos laborales, pensiones, educación, sanidad, etc). Es, de hecho, natural. Pero no somos seres racionales porque nos comportemos siempre de forma natural o instintiva, sino justo por lo contrario. Así que antes de formarnos una opinión sobre un tema que nos pueda perjudicar, hay que investigar con más ahínco el por que de ese tema. Determinar estar a favor de temas que nos perjudican, o descubrir que a largo plazo o en otro aspecto no nos perjudican, es un síntoma claro de no-imbecilidad. Pongamos el ejemplo de la edad de jubilación; en España el gobierno hace poco ha decidido subirla de 65 a 68 años (a grandes rasgos; la realidad es algo más complicada). Por supuesto la mayoría de la gente automáticamente está en contra de la medida. Pero si examinamos los argumentos a favor de la medida, tienen un peso no desdeñable. Simplificando mucho, la población es cada vez más vieja y se tienen menos hijos, por lo que la carga de las pensiones sobre el estado es cada vez mayor. Subir la edad de jubilación puede ser la diferencia entre tener pensión o no cuando yo me jubile. Además, la gente ahora llega a los 65 años mucho más sana que hace tiempo a los 60 de modo que ahora tendríamos más datos para tomar la decisión.

  • No votes a un partido sin haber leído su programa electoral. Creo que todos estaríamos de acuerdo en calificar de imbécil al que firma una hipoteca sin leer las condiciones (hay muchos) entonces ¿por qué votamos "con el corazón"? Cierto es que los programas electorales están llenos de mentiras al no tener carácter contractual, pero si uno tiene claro que va a votar a un partido, leer su lista de mentiras es lo mínimo que debería hacer, incluso aunque votemos con el único objetivo de sacar del poder al partido gobernante.

  • Lee filosofía. Es cierto que hay libros extremadamente densos y que además usan un argot propio, pero hay libros divulgativos bastante digeribles o incluso amenos.

  • Y por supuesto no tomes esta lista de máximas como tuya sin pensar sobre cada punto ;)

Una consideración final: nos suelen decir que todas las opiniones son respetables. No es cierto. hay opiniones que no son respetables. Hay opiniones gilipollas. Hay gente que cree y defiende que la tierra es plana, en serio, y que todas las fotos de satélite son parte de un complot gigantesco. Hay que escuchar y leer a los gilipollas y sus argumentos para decidir que lo son. Nótese como les estoy llamando gilipollas y no imbéciles porque hablamos de un caso distinto; el imbécil en este artículo es el que deja que otros decidan sus opiniones y afectos y no tiene sentido crítico. El gilipollas es el que teniendo una cantidad de evidencias abrumadora (como mirar al horizonte estando en la playa o una montaña alta y ver que la tierra es jodidamente redonda) toma un partido contrario a las evidencias. También hay imbéciles gilipollas, que dejan que un gilipollas les guíe. Ir en ocasiones contra lo establecido es bueno y está en nuestros genes, pero si después de evaluar las cosas uno decide ser favorable a ciertos temas, se convierte en gilipollas (o imbécil gilipollas, si ni siquiera ha evaluado nada).

[Spam]Vendo piezas de Mazda RX-8

Compré un RX-8 siniestrado de 2007 con 32.000 kms para quedarme con el motor (ya que el mío andaba justito de compresión) y otras piezas, y el resto lo estoy vendiendo por partes.


Tengo muchas piezas, algunas altamente interesantes como caja de cambios, diferencial, alternador, bomba de agua, compresor del climatizador, volante, airbags, asientos, etc...


Si a alguien le interesa puede ver el listado de las piezas y los datos de contacto pinchando en éste enlace.